double ld = 0.299999999999999990009;
会被截断为0.29999999999999999
如何从float类型中获得更高的精度?
是否有一个包装更大值的类?
double ld = 0.299999999999999990009;
会被截断为0.29999999999999999
如何从float类型中获得更高的精度?
是否有一个包装更大值的类?
Gnu MP library 显然 支持 任意精度的浮点数运算。我建议你尝试一下,因为 GMP 是当前最快的通用任意精度算术库之一。它非常稳定,有全面的 C 接口,以及为许多编译器编译的 C++ 包装和二进制文件。
GNU MPFR 库基于 GMP,添加了大量使用任意精度计算的特殊函数。
有 long double
这种类型,但是例如在 MSVS 中,它是 double
的代名词(与平台相关)。
您还可以尝试一些高精度数学库,例如HPA。
double本身实际上已经非常大了(1×10^−37 → 1×10^37
),还有long double和long float
我认为它被截断是因为您没有设置std::cout的精度
#include <iomanip>
float yourfloat;
cout << fixed << setprecision(lengthoftheprecision) << yourfloat;
ld
时,我得到了0.29999999999999999
。调试器是否截断了该值? - Byron Whitlock