如何在Visual C++中表示大型浮点数

3

double ld = 0.299999999999999990009;

会被截断为0.29999999999999999

如何从float类型中获得更高的精度?

是否有一个包装更大值的类?

4个回答

7

Gnu MP library 显然 支持 任意精度的浮点数运算。我建议你尝试一下,因为 GMP 是当前最快的通用任意精度算术库之一。它非常稳定,有全面的 C 接口,以及为许多编译器编译的 C++ 包装和二进制文件。

GNU MPFR 库基于 GMP,添加了大量使用任意精度计算的特殊函数。


3

long double 这种类型,但是例如在 MSVS 中,它是 double 的代名词(与平台相关)。

您还可以尝试一些高精度数学库,例如HPA


不包括 Visual C++……“一个例外是针对x86架构的Microsoft Visual C++,它将long double作为double的同义词。” - Byron Whitlock

1

如果你真的需要更高的精度,那么你需要一个多精度库。有一些免费的库可供使用,比如GMP(LGPL软件)。


0

double本身实际上已经非常大了(1×10^−37 → 1×10^37),还有long double和long float

我认为它被截断是因为您没有设置std::cout的精度

#include <iomanip>
float yourfloat;
cout << fixed << setprecision(lengthoftheprecision) << yourfloat;

数字的范围与其表示精度没有直接关系(这是由于尾数/指数编码不变而引起的)。 - jdehaan
当我在调试器中查看ld时,我得到了0.29999999999999999。调试器是否截断了该值? - Byron Whitlock
@Byron,你说得对,它被截断了。@ardiyu07,设置精度可能会减少,但不会使精度增加到不存在的程度。 - jdehaan
@jdehaan 我并没有说浮点数的范围与精度有关系。@Byron Whitlock 是的,它确实有关系 :) - ardiyu07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接