使用浮动实现双打?

时间:2010-11-28 00:44:58

标签: floating-point double

假设我在一个只有32位宽的浮点类型的环境中,我想用64位浮点数做一些计算。

有没有合理/有效/可行的方法来使用float32数据类型来实现像float64这样更宽泛的浮点数据类型? (甚至浮动63,或浮动48,或任何明显比我更大的32?)

或者我最好只使用整数实现更长的浮点数据类型?

我猜测位位置的具体含义会使这基本上不可能,但我不是数字专家,我不知道如何搜索这个,所以也许那里有一个聪明的方法。

2 个答案:

答案 0 :(得分:3)

您可以使用一些技巧来获得比机器想要的精确度更高的精度。其中最着名的是Kahan求和算法,用于在计算一组浮点数之和时获得额外的精度:

http://en.wikipedia.org/wiki/Kahan_summation_algorithm

设计这样的程序需要对浮点计算的内部工作有相当详细的了解,因此请谨慎行事。

答案 1 :(得分:2)

我认为你的猜测是正确的。可以尝试将64位浮点数表示为两个32位浮点数的乘积,但我认为你不能同时使指数和尾数同时工作。它可能可能可以像浮动效果一样得到一个浮动效果,但整体看起来相当狡猾。

但是应该有用于使用整数的库。不久前,常用的CPU没有硬件浮动支持。