2011-12-01 26 views
-3

可能性の重複:
Is JavaScript's Math broken?奇妙な演算精度

私はOCamlの中算術精度の泉奇妙な問題を抱えています。見てください:

# 1.1+.2.2;; 
- : float = 3.30000000000000027 

これは、私が行うときに起こります:something.1 + something.2。誰かがそれを試してもらえますか?

+9

これは不思議ではない、浮動小数点数に固有のものです。あなたは1000番目の(球場の)ユーザーがこれにつまずいています。 – delnan

+10

[各コンピュータ科学者が浮動小数点演算について知っておくべきこと](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

答えて

5

これは浮動小数点値を使用する現実です。 1.1は2桁の10進数で正確に表現されますが、この値を表すには無限の2進数が必要です。有限のビット数でバイナリに1.1を格納するので、丸め誤差が発生します。

1

Ocamlフロート番号は、IEEE754倍精度の数値です。他のプログラミング言語でも同じ動作をします。恐らく、浮動小数点数bignums(Ocamlでは提供していません)が必要です。

コンピュータは、常に有限の精度のネイティブ数値(電卓のような)を持っています。

関連する問題