33

是否存在比双精度“更大”的本机 C++ 变量类型?
float 是 7
double 是 15(当然取决于编译器)
有没有更大的本机,甚至非本机?

4

8 回答 8

40

C++ 有long double,但不能保证它比普通的double. 在 x86 平台上,通常double是 64 位,long double或者是 64 位或 80 位(如果我没记错的话,这会给你 19 个有效数字)。

您的里程可能会有所不同,尤其是如果您不在 x86 上。

于 2008-11-02T20:58:44.053 回答
12

long double 通常只使用 10 个字节,但由于对齐,实际上可能在一个结构中占用 12 或 16 个(取决于编译器和选项)字节。

10 字节长的 double 提供 64 位尾数;当您想在浮点中存储 64 位整数而不损失精度时,这非常方便。

于 2008-11-03T00:00:15.963 回答
9

您可以使用GNU MP。它的浮点函数具有无限的尾数和 32 位或 64 位(取决于本机字长)指数。它还带有一个C++ 包装器

于 2008-11-02T21:30:47.717 回答
3

还有一些用于 C++ 的各种 bigfloat/bigint 库,它们允许任意精度的数学运算。Microsoft Codeplex 上有这个库,但谷歌搜索会找到很多其他库。

于 2008-11-02T21:16:07.417 回答
3

C++ 有 long double,但仍然非常有限。不妨试试 GNU 的 gmp 库。您可以根据需要设置任意大的数字,当您使用 gmp_add 而不是普通的 + 时,它会非常有趣且非常笨拙。我确定某处有一个 C++ 包装器。

于 2008-11-02T22:05:58.457 回答
2

long double,但通常也是 15 位精度。

于 2008-11-02T20:58:58.543 回答
2

long long double 只有一些 cpus 允许你使用它......

于 2010-09-03T02:44:31.063 回答
0

Boost 1.53 或更高版本具有多精度。

http://www.boost.org/doc/libs/1_54_0/libs/multiprecision/doc/html/index.html

于 2013-09-05T12:33:30.920 回答