双C++精度损失

Anu*_*age 8 c++

我正在开发一个在linux环境下运行的C++应用程序.我需要存储6个deciaml位置的大值.我用了一个双.但是在赋值之后,double变量不包含确切的值.它完善了.

例如:

double dValue = 79447461534242.913072; //Assignement of value
Run Code Online (Sandbox Code Playgroud)

但在那之后,当我看到dValue中的值时,它就像79447461534242.906

有人可以告诉我为什么会这样,并建议我正确的数据类型,它可以保持精确的值而不会失去精度.

Jer*_*fin 6

在一个典型的实施中,double大约有15位精度的.无论是小数点之前还是之后都没关系,它只是15位数.

在您的情况下,原始数字大约是20位数,因此五个会立即丢失.


Mar*_*mer 6

C++使用IEEE浮点类型,这些类型在设计上只能在一定程度上精确.如果您需要仲裁精度,请查看例如GNU MP Bignum或任何其他仲裁精度库.