2014-02-15 45 views
2

我不知道如何讓Python在執行重複正弦時像我的計算器一樣運行。使用Python複製計算器結果

我的Python代碼:

number = float(.565) 
pi = float(math.pi) 

for j in range(25): 
    number = round(math.sin(number*pi), 16) 

這將返回0.446445551265。

當我用我的計算器做同樣的操作時,我得到了0.4464454868。

無論我用於round()的精度如何,我都無法獲得與我的計算器相同的結果。

我也試過使用十進制庫,但沒有得到任何更好的結果。有任何想法嗎?

+4

你怎麼知道計算器的結果是正確的? –

+0

與你的計算器給你的程序和你正在運行的程序的區別小於'10e-8'。誰在乎差異?關於浮點的一個重要的事情是你正在處理精度有限的實數的表示。計算器和計算機之間的內部表示方式的細微差異將導致這種微小差異(由於累積效應而顯示)。 –

+3

另外,pi總是需要在某個點上舍入,所以最可能的原因是「math.pi」和計算器的「π」按鈕的精確度不同。 –

回答

2

在80位十進制數字精度執行時,將結果與

0.4464455542636494555603375755720232254414694834911

算法的誤差分析表明,在每個步驟中,先前的錯誤是由大約PI相乘(和的餘弦開始當前點),即大約3,並且當前浮點誤差被添加爲噪聲。所以誤差幅度是機器epsilon的3^25倍。

如果一個人慷慨,並允許錯誤取消和實際的派生值,人們也可以說錯誤放大因子是大約2^25,即雙數尾數的53位,最後25位如前所述,只有前28個可靠,相當於7-8個可靠的小數位,如問題陳述中所反映的那樣。

袖珍計算器的內部精度通常比顯示的精度要大,所以在這裏找到更精確的結果並不意外。