x86-64长双精度
在英特尔64位平台上,long double的实际精度是多少? 是80位填充到128或实际128位?
如果是前者,除了去gmp之外,还有其他选择来实现真正的128精度吗?
x86-64精度与常规x86相同。 扩展的双精度是80位,使用x87 ISA,增加了6个填充字节。 没有128位FP硬件。
但是,四通道或扩展四倍精度的软件实现可能受益于x86-64 64×64 => 128整数乘法指令。
我建议使用MPFR 。 它是一个更复杂的多精度浮点库,建立在GMP之上。
两者都很有可能是64位(取决于编译器和操作系统),因为编译器发出标量SSE2而不是x87指令。
x86不支持比80位更高的精度,但如果你真的需要超过64位的FP算法,你很可能应该检查你的数字,而不是用暴力解决问题。
有一些选择。
- 使用double-double来表示四元组。 例如,请参阅http://www.codeproject.com/Articles/884606/The-double-double-type 。 但是,该类型不符合IEEE标准。 您可以通过检查其epsilon值不如IEEE标准128位浮点数(1.926E-34)来判断。
- 使用真正的IEEE标准128位浮点数。 Microsoft VC ++编译器不提供此类型。 英特尔C ++编译器确实提供了一个_Quad类型,虽然它的实现目前还没有完成(没有I / O操作)。
- 使用第三方库。 我最近创建了一个名为double128的库,它基于英特尔C ++ _Quad,但增加了I / O操作。 它适用于Microsoft VC ++。 您可以访问http://www.cg-inc.com/Product/Double128获取更多信息。