有沒有人對haskell中的這個奇怪舍入有一個解釋(GHCi,版本7.2.1)。一切似乎罰款,除非我乘以100四捨五入 - 「100」有什麼特別之處?
*Main> 1.1
1.1
*Main> 1.1 *10
11.0
*Main> 1.1 *100
110.00000000000001
*Main> 1.1 *1000
1100.0
*Main> 1.1 *10000
11000.0
編輯:什麼是puzzeling我是舍入誤差僅顯示有100
編輯乘以時(2):我收到的意見,讓我認識到,這與haskell完全無關,而是浮點數的一個普遍問題。許多問題已經被問及(關於浮點數奇怪的問題),其中未解決的問題典型地將浮點數與實數混淆。
Perl,python,javascript和C都報告1.1 * 100.0 = 110.00000000000001
。這裏是C做什麼
double 10.0 * 1.1 = 11.000000000000000000000000
double 100.0 * 1.1 = 110.000000000000014210854715
double 110.0 = 110.000000000000000000000000
double 1000.0 * 1.1 = 1100.000000000000000000000000
的問題(即使是110.0精確的表示)仍然懸而未決「爲什麼會發生這種只能用100乘以時發生」,但我想沒有一個簡單的答案,其他比完全步進浮點乘法(感謝Dax Fohl強調10在二進制中沒有特別之處)
這個問題被問到[over](http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken)和[over](http://stackoverflow.com/questions/ 7185512/why-0-10-2-0-3-5-5511151231258e-17-in-php)和[over](http://stackoverflow.com/questions/6027937/javascript-float-subtract)。 – 2013-08-03 10:15:14
我認爲馬丁是問爲什麼發生在100但不是1000或10000.我最初也覺得這很奇怪。但是(可能)原因是,乘10的乘方不僅僅是數字的移位;它通過一些二進制乘法器,最終得到它給你的尾數和指數。既然10在二進制文件中沒有什麼特別的地方,那麼你可以在第一眼看到奇怪的東西,就像這樣。 –
[每個計算機科學家應該知道的關於浮點運算的知識](http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf) – rampion