英特尔64位平台上的long double的实际精度是多少? 它是80位填充到128还是实际的128位?
如果前者除了去gmp之外还有其他选择来实现真正的128精度吗?
答案 0 :(得分:9)
x86-64精度与常规x86相同。扩展的双精度是80位,使用x87 ISA,增加了6个填充字节。没有128位FP硬件。
四核或扩展四倍精度的软件实现可能受益于x86-64 64x64 =>但是,128整数乘法指令。
答案 1 :(得分:4)
我建议使用MPFR。它是一个更复杂的多精度浮点库,建立在GMP之上。
答案 2 :(得分:2)
两者都很有可能是64位(取决于编译器和操作系统),因为编译器会发出标量SSE2而不是x87指令。
x86不支持比80位更高的精度,但如果你真的需要超过64位的FP算法,你最有可能检查你的数字,而不是用暴力解决问题。
答案 3 :(得分:0)
有一些选择。
答案 4 :(得分:0)
我建议通过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的测试。