2015-12-04 63 views
1

我正在使用斯威夫特計算器,但我遇到了一個小問題:當兩個數相乘時,我的結果與普通計算器的結果不一樣。如何在Swift中乘以數字?

例如:

在斯威夫特:

0.333328247070312 * 16 = 5.33325195312499 

在常規的計算器:

0.333328247070312 * 16 = 5.333251953 

我應該怎麼做才能得到相同的結果,如雨燕常規計算器?

+2

浮點算法不精確。 [每個計算機程序員應該知道的浮點數](http://blog.reverberate.org/2014/09/what-every-computer-programmer-should.html)。 –

+0

感謝每一個發現我使用Double類型的解決方案,而不是浮動 – abedAssa

回答

1

您的「常規計算器」在結果打印中看起來不對或很奇怪,所以,您不應該依賴它。我重新檢查你在Python3計算這是衆所周知的計算都在binary64雙和打印最精確的十進制形式:比雨燕輸出

>>> 0.333328247070312 * 16 
5.333251953124992 

它更詳細的(一個數字)。你的輸出也不能被驗證爲binary32計算,因爲後者有7個正確的十進制數字,並且通常不會打印更多的數字。這個計算器是什麼?由於其自定義的6字節浮點數,我假設一些基於Pascal的工具。

試着讓計算器打印最詳細的表格。如果失敗,請將其丟棄並使用最精確的工具進行驗證,或者如果您的任務確實得到相同的結果,請詳細瞭解其處理過程。