質問編集履歴

1 文法の修正

max_eipi

max_eipi score 7

2019/03/02 20:44  投稿

実数の計算誤差について
### 知りたいこと
- 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という規格に準拠しているようなので、
自分の浅はかな考えでは結果に違いが出ないものだと考えていました。
しかし、そんなことはないと言うことが上で実証されているので、「この違いは一体何によって生じるものなのだろうか?」
というのを知りたい所存です。
もちろん、動作環境に依存することもあると思いますが、自身の知見を広げるためという意味でも、
  • 浮動小数点

    48 questions

    浮動小数点は、コンピュータが数値を扱う際に実数を表現する方法のひとつです。 数値を、それぞれの桁の値が並んでいる仮数部と、小数点の場所を示す指数部で表します。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る