2012-02-24 6 views
2

atof()はどのコンパイラが使用され、どの標準ライブラリがマシン上にあるかに基づいて異なる浮動小数点結果を生成できるのでしょうか。 IEEEの浮動小数点演算の仕組みによって変換が常に正確であるとは限りませんが、同じアーキテクチャー上でさまざまなバージョンのGCCを使用するときに出力されるIEEE浮動小数点数が同じであるかどうかは疑問です。atof()は異なるコンパイラ/ライブラリ(x86-64)に基づいて異なる結果を生成することができます

例:

ダブルX = atof( "78.93241")。

xは、さまざまなGCCバージョンとさまざまなLinuxディストリビューション(GCC 4.1 - > 4.6、RHEL 6.0、Debianなど)間で同じアーキテクチャで同じになります。そうでない場合は、この動作を文書化する何かがありますか?

+1

「78.93241」には正確な浮動小数点表現がないことに気づいていますか?それが浮動小数点、倍精度、拡張、またはIEEE以外のものであれば問題ありません。 – hirschhornsalz

+0

はい、私は浮動小数点での表現(何であろうとも)が同じであるかどうかを知りたいと思います(xのビット値はGCCコンパイラのバージョン/同じアーキテクチャのマシン間で等しくなります)。 – NothingMore

+0

それはできません。 'atof'(それはあなたが確かに知っているように2倍を返します)は' strtod'と同じです。これはISO 9899(別名C99)とAFAIK C89で記述され、文書化されています。ほとんどの場合でも、stdlib.hのすべての実装がこの標準に厳密に準拠するわけではありません。あなたの例で 'double'から' float'までの丸めは、浮動小数点環境の現在の丸め設定に依存するかもしれません。 – hirschhornsalz

答えて

2

実際のところ、atof()は異なるコンパイラや異なるハードウェアで異なる結果を生成しません。同じハードウェアと浮動小数点フォーマットであっても、コンパイラやライブラリにはバグが存在する可能性があるため、異なる結果を得ることができます。たとえば、this bugを参照してください。

+1

バグページから:「クローズドワトキンス」 - Microsoft ... :-) – hirschhornsalz

関連する問題