是否存在比双精度“更大”的本机 C++ 变量类型?
float 是 7
double 是 15(当然取决于编译器)
有没有更大的本机,甚至非本机?
8 回答
C++ 有long double
,但不能保证它比普通的double
. 在 x86 平台上,通常double
是 64 位,long double
或者是 64 位或 80 位(如果我没记错的话,这会给你 19 个有效数字)。
您的里程可能会有所不同,尤其是如果您不在 x86 上。
long double 通常只使用 10 个字节,但由于对齐,实际上可能在一个结构中占用 12 或 16 个(取决于编译器和选项)字节。
10 字节长的 double 提供 64 位尾数;当您想在浮点中存储 64 位整数而不损失精度时,这非常方便。
还有一些用于 C++ 的各种 bigfloat/bigint 库,它们允许任意精度的数学运算。Microsoft Codeplex 上有这个库,但谷歌搜索会找到很多其他库。
C++ 有 long double,但仍然非常有限。不妨试试 GNU 的 gmp 库。您可以根据需要设置任意大的数字,当您使用 gmp_add 而不是普通的 + 时,它会非常有趣且非常笨拙。我确定某处有一个 C++ 包装器。
long double,但通常也是 15 位精度。
long long double 只有一些 cpus 允许你使用它......
Boost 1.53 或更高版本具有多精度。
http://www.boost.org/doc/libs/1_54_0/libs/multiprecision/doc/html/index.html