数论应用中扩展精度浮点的快速计算

时间:2013-08-31 17:13:38

标签: floating-point floating-accuracy hardware-acceleration floating-point-precision

我是一名数学研究生,从事一项研究项目,该项目涉及计算高度数字域中代数整数的范数。从本质上讲,这将涉及将100多个浮点数再乘以得到一个整数。我在C编程。

我遇到的问题是我开始需要计算超过1e20 = 10 ^ 20的规范,这超出了我的硬件(Macbook)的整数和浮点精度。

我可以尝试使用某种软件仿真来实现扩展精度,但我的理解是它比硬件浮点计算慢大约300倍。这意味着我现在需要几天的计算将需要几年时间,这是不可接受的。

我有两个问题: 问题1:对于扩展精度的软件仿真(比如10 ^ 36精度,大约是硬件精度的两倍),我的估计速度要慢300倍吗?过度悲观?

第二季度:我是否有数千美元可以解决这个问题,可能提供哪种硬件解决方案?

1 个答案:

答案 0 :(得分:2)

根据您提供的信息,除了MPFR之外,我没有看到任何其他解决方案。是的,硬件浮点更早地给出结果,但这是错误的结果。

你需要选择一个精度来进行计算。你的问题让你觉得你只关心最终结果的精确度,但实际上,每次操作都会失去准确性,如果你想能够决定什么整数,这些损失的累积效应必须小于0.5是最终的答案。您可能需要选择一个高于足以代表最终结果的精度。

估算所需精度的两种方法是事前数值分析和区间算法。我对数值分析一无所知,但基本原理是每个非理性因子都由多精度浮点数表示,我们假设它们距离小于0.5 ULP,每个乘法可能是0.5 ULP以外从实际结果(实际浮点操作数的乘积,而不是操作数应该代表什么)。人们发现在相对精确度方面更容易推理。

间隔算术使操作数加倍,但为实际结果提供了保证的边界。如果在计算的间隔中只有一个整数,那就做得好!否则,请以更高的精度重新开始。

最后,你问速度。如果你真的只有乘法,那么并行化计算是微不足道的,因为乘法是相关的。