6

私が実装している C アプリケーションでは、一連の構成値をファイルに読み書きできる必要があります。これらの値は浮動小数点数です。将来、別のアプリケーション (C++、Python、Perl などで記述可能) がこの同じデータを使用する可能性があるため、これらの構成値は、コンパイラやマシンに依存しない明確に定義された形式で格納する必要があります。 .

バイト順変換関数 ( ntoh/hton) を使用してエンディアンを処理できますが、「float」値のさまざまな意味を回避する最善の方法は何ですか? フロートを格納するための一般的な方法はありますか? 丸めと切り捨ては、定義されている限り問題ありません。

4

4 に答える 4

6

おそらく 2 つの主なオプションがあります。

  1. テキスト形式で保存します。ここでは、適切に定義された小数点記号を使用して特定の形式に標準化し、科学表記法、つまり6.66e42.
  2. IEEE754 規格を使用してバイナリ形式で保存します。4 または 8 バイトのデータ型を使用します。そして、あなたが指摘したように、エンディアンの規則に落ち着く必要があります。

IEEE754 をネイティブに理解しないマシンがあるため、おそらくテキスト形式の方が移植性が高くなります。とはいえ、そのようなマシンは最近ではまれです。

于 2013-07-30T13:31:05.270 に答える
4

C 形式の入出力関数には、このための形式指定子%a. 浮動小数点数を 16 進浮動小数点形式[-] 0x hでフォーマットします。hhhhp ± d。つまり、必要に応じて「-」記号、基数を含む小数部の 16 進数、指数を開始する「p」(「累乗」)、および 2 の符号付き指数 (10 進数) があります。

C の実装で 2 進浮動小数点 (またはFLT_RADIX2 のべき乗である任意の浮動小数点) を使用している限り、この%a形式での変換は正確である必要があります。

于 2013-07-30T14:12:25.167 に答える
0

構成値などの少量のデータの場合は、バイナリではなくテキストを使用してください。必要に応じて、JSON や XML などの何らかの形式の構造化テキストを使用してください。必要に応じて、浮動小数点数を表すために書き込む桁数を決定してください。

必要な移植性の範囲 (言語、オペレーティング システム、時間、スペースなど) が大きくなるにつれて、テキストを支持する議論の力が強くなります。

于 2013-07-30T13:40:56.237 に答える
0

IEEE 754または ISO/IEC/IEEE 60559:2011 は、ほとんどの言語で使用される浮動小数点の標準です。

C の場合、C11 の標準で正式に採用されています。(C11 Annex F IEC 60559 浮動小数点演算)

于 2013-07-30T13:30:14.160 に答える