1

Java 言語仕様ポイント 3.10.2は、浮動小数点値が IEEE 754 標準で指定されているとおりに変換されることを示しています。の場合strtod、C 標準では、関数がテキストを float 値に変換する方法が指定されています。表現自体に関しては、両者は同じケースをカバーしているようです。よくわからないのは、丸めルールはどうですか?Java コンパイラは、何とは異なる変換をstrtod行いますか?

背景は、Java バイトコード コードにコンパイルしたいため、クラス ファイルでの表現のために float/double 値のテキスト表現を変換する必要があるということです。

たとえば、次の Java コードはより正確な値を出力します。

double value = 1.23412991913372577889911;
System.out.println(value);
// Output: 1.2341299191337258

strtod を使用して同じ値を変換して出力すると、正確ではない値が出力されます。

const char* textual = "1.23412991913372577889911";
double result = strtod(textual, ...);
std::cout << result << std::endl;
// Output: 1.23413

これは出力の問題ですか、それとも値が実際に別の方法で変換されているのでしょうか?

編集: Pascal Cuoqがコメントしたように、値を完全な精度で出力すると(私は設定でそうしましたstd::cout.precision())、値は等しいので、変換が同じ値につながると仮定します。そのためのテストを行うと思います。:-)

4

1 に答える 1