6

Intel 64 位平台上 long double 的实际精度是多少?是 80 位填充到 128 还是实际 128 位?

如果是前者,除了 gmp 之外,还有其他选择可以达到真正的 128 精度吗?

4

4 回答 4

9

x86-64 精度与常规 x86 相同。扩展双精度为 80 位,使用 x87 ISA,添加了 6 个填充字节。没有 128 位 FP 硬件。

不过,quad 或扩展 quad 精度的软件实现可能会受益于 x86-64 64x64 => 128 整数乘法指​​令。

于 2010-05-10T00:16:09.810 回答
4

我建议使用MPFR。它是建立在 GMP 之上的更复杂的多精度浮点库。

于 2010-05-10T05:43:22.540 回答
2

很有可能两者都是 64 位的(取决于编译器和操作系统),因为编译器发出的是标量 SSE2 而不是 x87 指令。

x86 不支持比 80 位更高的精度,但是如果您确实需要超过 64 位的 FP 算法,您很可能应该检查您的数字,而不是用蛮力解决问题。

于 2010-05-10T00:36:34.927 回答
1

我推荐使用 MPFR 或 GMP 的 Boost 包装器:

提升 1.70:cpp_bin_float

除了任何所需精度的任意类型外,还提供以下类型:

cpp_bin_float_single           (24 bits + mantissa = 32 bits)
cpp_bin_float_double           (53 bits + mantissa = 64 bits)
cpp_bin_float_double_extended  (64 bits + mantissa)
cpp_bin_float_quad             (113 bits + mantissa = 128 bits)
cpp_bin_float_oct              (237 bits) + mantissa = 256 bits)

Boost 提供了几乎开箱即用的功能。编译完成后,只需在 Visual Studio 项目中添加一个指向包含和库目录的指针即可。

使用 Visual Studio 2017 + Boost v1.70 测试。

请参阅编译 boost 的说明

于 2019-05-16T16:17:43.273 回答