neige68 / shiki-no-keisan-dll

式の計算(計算式評価)DLL, x86/x64対応, C#, VB.NET サンプル付き
Boost Software License 1.0
0 stars 0 forks source link

10進数からの変換の精度が悪い #2

Closed neige68 closed 4 months ago

neige68 commented 4 months ago

特に C++ サンプルの eval を用いて、

eval -P17 1.23456789012345679 1.23456789012345680 1.23456789012345680-1.23456789012345679

を実行すると大小関係が逆転するほどです。

1.23456789012345679 = 1.2345678901234569
1.23456789012345680 = 1.2345678901234567
1.23456789012345680-1.23456789012345679 = -2.2204460492503131e-16
neige68 commented 4 months ago

boost::spirit::x3::double_ では double で計算を行っているので、誤差が入ることがあります。 68ac222279fad54262429dd5264adcd59ddd0766 にて、文字列を切り出して std::stod で double に変換するようにしました。