ホームページ > バックエンド開発 > C++ > C でスペースで区切られた Float を解析する最速の方法は何ですか?

C でスペースで区切られた Float を解析する最速の方法は何ですか?

Barbara Streisand
リリース: 2024-12-03 10:19:11
オリジナル
518 人が閲覧しました

What are the Fastest Methods for Parsing Space-Separated Floats in C  ?

C でスペースで区切られた float をすばやく解析する方法

スペースで区切られた float の解析は、特に大きなファイルを扱う場合、時間のかかる作業になる可能性があります。標準の C ストリームを使用するような従来の方法は時間がかかる可能性があります。この記事では、C で float を解析するための効率的な方法をいくつか取り上げます。

Boost Spirit

Boost Spirit は、高度な解析機能を提供する強力な C ライブラリです。最初の学習には時間がかかりますが、Spirit は高速で信頼性の高い解析を提供します。使用方法は次のとおりです。

#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;

int main() {
  std::string line = "134.32 3545.87 3425";

  double x, y, z;
  auto it = line.begin();
  bool success = qi::phrase_parse(it, line.end(), qi::double_ >> qi::double_ >> qi::double_, qi::blank, data);

  if (success) {
    std::cout << "Parsed values: " << x << " " << y << " " << z << std::endl;
  }

  return 0;
}
ログイン後にコピー

メモリ マップ ファイル

メモリ マップ ファイルは、従来の I/O 操作のオーバーヘッドを発生させずに、ファイルをメモリに読み取る高速な方法を提供します。これにより、解析が大幅に高速化されます。

#include <iostream>
#include <fstream>
#include <sys/stat.h>
#include <sys/mman.h>

int main() {
  std::ifstream file("data.txt");
  struct stat statbuf;
  fstat(file.fileno(), &statbuf);

  // Memory-map the file
  char* data = static_cast<char*>(mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, file.fileno(), 0));

  // Iterate through the data to parse floats
  for (char* ptr = data; ptr < data + statbuf.st_size;) {
    double x, y, z;
    ptr = std::sscanf(ptr, "%f %f %f", &x, &y, &z);
    // Parse the float values and perform desired operations
  }

  // Unmap the file
  munmap(data, statbuf.st_size);

  return 0;
}
ログイン後にコピー

ベンチマーク

速度の違いを示すために、さまざまな解析方法がベンチマークされています。 Boost Spirit が最も高速なものとして浮上し、メモリ マップド ファイル アプローチと標準 C ストリームがそれに続きました。正確なパフォーマンスは、データのサイズと複雑さによって異なる場合があります。

結論

C でのスペース区切りの float の解析は、さまざまな手法を使用して最適化できます。 Boost Spirit は最高のパフォーマンスを提供しますが、その解析メカニズムについてさらに理解する必要があります。メモリ マップ ファイルは中間点を提供し、コードの単純さを維持しながら解析を高速化します。従来の C ストリームは依然として実行可能なオプションですが、計算は遅くなります。

以上がC でスペースで区切られた Float を解析する最速の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート