-1

いくつかの数字でファイルを解析しています。数値を string から float または double に変更しようとしていますが、stof と stod の精度の問題が見つかりました。VS C++ ではわずかにずれています。例えば

string str1="3.14", str2="45.106";
double number1, number2;
number1=stod(str1);
number2=stof(str2);

(number1==3.14) をテストすると、「false」が返されます。デバッガーで見ると、number1 は実際には 3.139999999 などです。number2 は 45.1060000002 などです。説明または解決策はありますか?

4

1 に答える 1

0

次の例をご覧ください。

浮動小数点はどのように格納されますか? いつ問題になりますか?

このことから学ぶべきことは、2 つの浮動小数点数を直接比較することが解決策になることはほとんどないということです。浮動小数点数には一定の精度しかないため、期待できる精度には制限があります。これは、Zeta によるコメントのリンクにうまく記載されています。

于 2013-03-05T20:34:09.950 に答える