在Intel 64位平台上,long double的实际精度是多少?它是80位填充到128位还是实际的128位?
如果是前者,除了使用gmp外,是否有其他选项可以实现真正的128位精度?
在Intel 64位平台上,long double的实际精度是多少?它是80位填充到128位还是实际的128位?
如果是前者,除了使用gmp外,是否有其他选项可以实现真正的128位精度?
x86-64精度与常规x86相同。扩展双精度为80位,使用x87 ISA,并添加了6个填充字节。没有128位FP硬件。
软件实现四重或扩展四重精度可能会从x86-64 64x64 => 128整数乘法指令中获益。
很有可能两者都是64位(取决于编译器和操作系统),因为编译器正在发出标量SSE2而不是x87指令。
x86不支持高于80位的精度,但如果您真的需要超过64位的FP算法,最好检查您的数值计算而不是用蛮力解决问题。
long double
是 x87 的80位扩展精度格式。 - cafcpp_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)
__int128_t
和__uint_128_t
“类型”,gcc提供了128位精度算术。 - rafak