2014-10-07 132 views
1

在MSVC發佈模式和調試模式下,雙精度處理的精度值在小數點後出現差異。在發佈模式/調試模式下雙精度的差異

Ex - 注意: - Double dataFilled; 1)日誌(dataFilled)==>的#include

Debug Mode dataFilled =96.1588665998339850 
Release Mode dataFilled =96.1588665998339420 

Intended value is 96.1588665998339850 

能有人可以請指導我,爲什麼我得到的發佈和調試不同的值。

+2

如果你[提供的代碼](http://stackoverflow.com/help/mcve) – 2014-10-07 13:17:50

+0

會有幫助,因爲發佈和調試模式使用不同的分配器? – mpacheco 2014-10-07 13:22:56

回答

1

雙精度浮點數的IEEE二進制表示僅適用於15位十進制數字。您正在打印18.它看起來像兩個結果不同的最低顯着尾數位(53)的值。這種差異很容易由操作順序的差異或兩種構建配置之間的中間結果的處理產生。

如果你真的需要儘可能多的精度,那麼你需要查看一個任意精度的數學庫。否則,請接受您的機器的本機浮點算法不精確(因爲所有機器必須是)。在計算機上執行極端精確算術可能需要很多工作。

作爲一個解決方法,VS可能會有一些構建選項,您可以在Release版本中對其進行浮點處理,更像調試版本(可能會導致性能降低)。但是使用這種選擇只是一個繃帶。你真的應該使用一種計算方法,你可以依靠它來獲得你所需要的精度而不需要任何技巧。

+0

如果這是關於自動化測試,那麼在大多數情況下,測試浮點計算的確切值是錯誤的。您應該測試計算結果是否在預期值的可接受增量範圍內。 – 2014-10-07 13:42:57