2

我是一名数学研究生,正在从事一个研究项目,该项目涉及计算非常高阶数域中代数整数的范数。本质上,这将涉及将另外 100 个浮点数相乘以获得一个整数。我正在用 C 编程。

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

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

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

Q2:我是否有数千美元可以解决这个问题,有哪些硬件解决方案可用?

4

1 回答 1

2

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

您需要选择一个精度来进行计算。您的问题看起来好像您只关心最终结果的精度,但实际上,每次操作都会丢失精度,如果您希望能够确定什么整数,这些损失的累积影响必须小于 0.5是最终的答案。您可能需要选择一个高于足以代表最终结果的精度。

估计所需精度的两种方法是事前数值分析和区间算术。我对数值分析一无所知,但基本知识是每个无理因子都由一个多精度浮点数表示,我们假设它距离小于 0.5 ULP,并且每次乘法可能距离实际结果 0.5 ULP (实际浮点操作数的乘积,而不是操作数应该表示的乘积)。人们发现根据相对精度进行推理更简单。

区间算术使运算次数加倍,但为实际结果提供有保证的界限。如果计算出的区间中只有一个整数,那就太好了!否则,以更高的精度重新开始。

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

于 2013-08-31T19:31:01.017 回答