2013-11-23 206 views
-2

是否將乘以兩個雙精度值 - > -329.0000 * 0.000000的計算給出結果-0.000000的32位和0.000000的64位?對32位和64位操作系統的不同計算

+1

它*應*返回相同的值,[按照IEEE-754規則](http://en.wikipedia.org/wiki/IEEE_floating_point) - 假設環境工作如此。單個(32位)和雙(64位)浮點類型通常都存在於[非嵌入] 32位和64位環境中。 – user2864740

+2

我只是試過了,兩者都得到了相同的結果。如果您嘗試過並得到不同的結果,請使用該信息更新您的問題。如果你還沒有嘗試過,爲什麼不呢? –

+2

你已經多次提出了這個問題,並且從我所看到的中得到了一些很好的答案和建議,解釋了浮點算法是如何工作的。我仍然無能爲力,究竟是什麼激發了你的問題,或者以前的答案如何回答你的問題。 –

回答

3

您已經在前面四個問題中詢問了此問題背後的問題,並且您已被告知您所看到的原因是您的負值不是零(或負值爲零),而是由於用於顯示它的格式規格,因此顯示爲「-0.000000」。該值比-0.0000005更小(接近於零),因此它四捨五入爲全0的顯示顯示不是實際值

%g指定符打印值,您將看到它不是零。

+0

'-329.0000 * 0.000000'的結果不是一些小的非零值。在數學上,它恰好爲零。在IEEE算術中,結果爲負零;用'%g'打印顯示「-0」,並且它等於「0.0」。 (如果OP提供了實際的代碼,這將更清楚。) –

+0

@KeithThompson:從OP的其他問題可以看出,它們不是**乘以0.000000的-329.0000。它們有一些'double'對象,它包含一個非零的非常小的值,但由於格式化而顯示爲「0.000000」,這導致它們錯誤地認爲它是0.同樣,乘以這個微小值的乘積 - 329是一個微小的負值,顯示爲「-0.000000」,但實際上並不爲零。 OP的其他兩個問題顯示了一個分支,表示該值不爲零(包括負值爲零)。 –

相關問題