質問: ### 知りたいこと * float型やdouble型の数値を用いて計算した結果の誤差について * 誤差が出る理由や要素 ### コード どれも(8.2*100)の結果を出力するだけの簡単なプログラム * **C#** URL: https://paiza.io/projects/C1ogl-OOBCRWlIfK-22f2A 結果: 820 * **PHP** URL: https://paiza.io/projects/HUoUawGobikaCaNU_iPJFw 結果: 820 * **JavaScript** URL: https://paiza.io/projects/NGOJmJDTx3sPnU_-MwD7GA 結果: 819.999... * **Java** URL: https://paiza.io/projects/AV2kgDYU2atpUD6X8ZEuXQ 結果: 819.999... ### 質問 上記の結果を見てほしいのですが、8.2*100 をいくつかの言語で計算させたところ、 * C#,PHP -> 820 * JavaScript,Java -> 819.999... という結果になりました。 各言語の標準的な仕様としては、浮動小数点数はIEEE754という規格に準拠しているようなので、 自分の浅はかな考えでは結果に違いが出ないものだと考えていました。 しかし、そんなことはないと言うことが上で実証されているので、「この違いは一体何によって生じるものなのだろうか?」 というのを知りたい所存です。 もちろん、動作環境に依存することもあると思いますが、自身の知見を広げるためという意味でも、 そのようなものも含め「こういうことが考えられるよ」というのがあったらご回答願います。
回答: 単に、10進文字列に変換する際に、どう丸めるかの差だと思います。 `8.2*100`を変数に代入して、`820`を引いた値を表示してみてください。 単に`8.2*100-820`と書くと、コンパイル時に計算してしまうと思います。