簡體   English   中英

雙 C++ 的精度損失

[英]Precision loss with double C++

我正在開發一個在 linux 環境中運行的 C++ 應用程序。 我需要存儲一個帶有 6 個小數位的大值。 我為此使用了一個雙精度值,但是在分配它之后,它不包含確切的值。 它被四舍五入了。

前任:

double dValue = 79447461534242.913072; //Assignement of value

但是這樣做之后,每當我看到 dValue 的值時,它就像 79447461534242.906

有人可以讓我知道為什么會發生這種情況並建議我正確的數據類型,它可以保存確切的值而不會失去任何精度。

在典型的實現中, double的精度總計約為 15 位。 小數點之前還是小數點之后都沒有關系,一共15位。

在您的情況下,原始號碼大約為 20 位,因此立即丟失了 5 位。

C++ 使用 IEEE 浮點類型,這些類型在設計上只在一定程度上精確。 如果您需要任意精度,請查看例如GNU MP Bignum或任何其他任意精度庫。

最常用的雙精度格式以 53 位精度存儲數字。 這給出了大約 16 位十進制數字的精度。

您可能會發現long double提供了更高的精度,但不能保證它比double

如果您需要比從本地機器類型獲得的精度更高的精度,您將需要一個高精度數值庫,例如GMP

在 linux 上,您可以使用 __float128 ,它是一種四倍精度浮點類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM