定点和任意精度计算的相关性


10

我看到很少有非浮点计算库/程序包。鉴于浮点表示形式的各种不准确性,提出了一个问题,为什么至少在某些领域中,这种提高的准确性可能值得使用定点运算的复杂性。

使用定点特征值求解器是否有重大困难?他们将有多慢/快,不准确/准确?

相关:这个这个


Milind R,谢谢您的提问。我认为您的问题很有趣,但可能不适合该网站。我敦促您查看网站常见问题解答以获取指导。当我看您的问题时,尽管我认为存在与现场相符的问题的要素,但我给人的印象是这是咆哮的开始。值得一问的是在计算科学中整数算术和定点算术是否有很多应用,并要求将这些算术与浮点数进行比较。我鼓励编辑您的帖子。
Geoff Oxberry

是的,它源于a怒,但我说这是为了寻求维持现状的理由。正如您所推测的,我的问题是为什么我们不能在密集型数值上向整数和定点数学大幅度转变。您能代表我编辑吗?我确实尝试过,但是我不知道我的问题是不合适的。
Milind R

5
我认为对此有一个客观的技术答案:如果您运行几乎任何科学计算(例如,线性求解),则精确存储所需的位数会随着时间呈指数增长。因此,有用的工作需要对不精确性的有力支持。
Geoffrey Irving

@MilindR:计算几何社区一直对高性能且精确的实数计算感兴趣。我可以在此研究领域中观察到与您相关的所有实际问题。您可以搜索的示例是LEDA库。
shuhalo

@GeoffreyIrving三角矩阵中的零怎么办?除了不容易出错的浮点数,它们不能存储为其他任何东西吗?
Milind R

Answers:


5

在某些情况下,使用定点算法可能是适当的。通常,对于科学计算(至少在大多数人认为的意义上来说),由于需要表达所遇到的大动态范围,因此它是不合适的。您以特征值问题为例,但是在科学界,人们常常对矩阵的最小特征值感兴趣(例如,在计算量子系统的基态时)。如果使用定点,则相对于大特征值,小特征值的准确性通常会大大下降。如果矩阵包含比例较大的条目,则较小的特征值可能完全无法表示工作精度。这是数字表示的问题。无论您如何进行中间计算,这些参数都成立。您可以计算出比例以应用于计算结果,但是现在您刚刚发明了浮点数。构造元素表现良好但特征值表现极差的矩阵很容易(例如威尔金森(Wilkinson)矩阵,甚至具有完全整数项的矩阵)。这些示例并不像看起来的那样病态,并且科学前沿的许多问题都涉及行为非常差的矩阵,因此在这种情况下使用定点是Bad Idea(TM)。

您可能会争辩说,您知道结果的大小,并且不想在指数上浪费一点,所以让我们谈谈中间物。使用定点通常会加剧灾难性取消和舍入的影响,除非您确实费尽心机才能更高精度地工作。性能损失将是巨大的,我可以推测,使用具有相同尾数位宽度的浮点表示形式将更快,更准确。

定点可以发光的一个区域是几何计算的某些区域。特别是如果您需要精确的算术运算或事先知道所有数字的动态范围,则定点可让您利用表示形式中的所有位。例如,假设您要计算两条线的交点,并以某种方式将两条线的端点归一化以位于单位平方中。在这种情况下,相交点可以比使用等效的浮点数来表示精度更高的位(这将浪费指数上的位)。现在,几乎可以肯定,这种计算所需的中间数需要以更高的精度计算,或者至少要非常小心地进行(例如,将两个数字的乘积除以另一个数字时,您需要非常小心)。在这方面,定点从表示的角度而不是从计算的角度更有利,并且我可以说,当您可以在算法输出的动态范围上确定确定的上限下限时,这通常是正确的。这种情况很少发生。

我以前认为浮点表示形式是粗糙的或不准确的(为什么要浪费指数?!)。但是随着时间的流逝,我逐渐意识到,它确实是实数最好的表示形式之一。自然界中的事物以对数标度显示,因此实际数据最终会跨越很大范围的指数。为了达到最高的相对准确度,还需要对数刻度,使指数的追踪更加自然。“自然”表示的唯一其他竞争者是对称级别索引。但是,加法和减法在该表示中要慢得多,并且缺少IEEE 754的硬件支持。浮点标准已被大量考虑。,由数值线性代数的支柱组成。我想他知道数字的“正确”表示是什么。


4

作为为什么很少使用精确算术/不动点算术的示例,请考虑以下因素:

  • 在有限元方法中,就像在科学计算中使用的几乎所有其他方法一样,我们得出的线性或非线性系统只是逼近现实世界。例如,在FEM中,要求解的线性系统仅是原始偏微分方程的近似值(它本身可能只是现实世界的近似值)。那么,为什么要付出巨大的努力来解决仅是近似的问题呢?

  • 我们今天使用的大多数算法本质上都是迭代的:牛顿法,共轭梯度等。只要我们满意迭代的精度足以解决问题,就终止这些迭代。换句话说,我们在获得确切解决方案之前终止。和以前一样,当我们知道我们只是在计算近似值时,为什么要对迭代方案使用精确算法?


承认是令人沮丧的,但是,是的,您的回答基本上将精确计算的大规模使用迫在眉睫。我想我float很快就不会再见了。
Milind R

@MilindR:我不太确定您的目标是什么。您似乎有一把锤子,对没有人钉子或认为锤子是有用的工具感到沮丧。但这不是因为我们不喜欢您-我们考虑了很长时间这些问题,只是认为我们拥有的螺丝刀是合适的工具。我发现没有什么令人沮丧的(除非您有锤子),因为这只是一种务实的方法-为什么当我们只做近似时才使用精确算术?
Wolfgang Bangerth 2013年

令人沮丧的是,一个完全正常的问题可能会被如此恶劣地处理,以至于无法有效解决。还因为与从存储值到输出值的浮点的不精确特性相比,任意精度的理想看起来如此有前途。
Milind R

问题是舍入误差非常难以分析。我意识到这一天,我开始学习数值分析和数值线性代数。因此,一个完全避免该问题,使调节成为非问题的系统应该席卷全球吗?在想。我当然理解这些限制,但与破坏交易相比,它们更像是刺激物。有点像缩小处理器中晶体管的难度。是的,它很难分析,但英特尔仍然可以做到。
Milind R

1
如果问题病情如此严重以至于难以解决,那么它的解决方案就不稳定。这是原始问题的问题,而不是浮点表示。是的,也许您可​​以使用精确表示形式来解决问题。但是解决方案并不稳定,因此可能与您真正想要的没有任何关系。如果您认为数字表示法是问题,那您就错了。
Wolfgang Bangerth 2013年

3

如果您查看此库以进行正确的舍入:CRlibm,您将在文档中看到通常必须证明算法是准确的(使用合理的证明)。为什么?函数结果的稳定性和收敛速度没有“一刀切”的答案。简而言之,没有“免费午餐”-您必须努力证明自己的推理是正确的。这是由于所建模的函数的行为所致,而不是由于基础硬件的行为所致(无论是使用整数还是浮点单元,尽管是的,它们都具有“陷阱”,例如上溢/下溢,非正规数等),即使结果是您要收敛到整数,用于查找结果的算法不一定非常稳定。

Eigen是一个C ++库,具有用于求解矩阵的各种算法,每种算法具有不同的属性。 本页包含一个表格,该表格讨论了用于求解矩阵的各种算法的速度与精度之间的权衡。我怀疑Eigen库可以满足您的要求。:-)


谢谢..非常有用,而且链接很好。但是,使用定点和舍入的程度有限会不会产生更准确的输出?由于表示本身是精确的开头,不像浮点数?
Milind R

1
我建议您从另一个角度来解决问题。在逻辑入门中,您了解到问题的解决方案包含三个部分:定义,推理和结论/结果。您(像我们大多数人一样)可能已经很习惯于解决问题的“定义”步骤-通常,您可以“定义”问题;但是,如果您感到沮丧,有时您会遇到更困难的问题,需要在“推理”部分进行更多的工作。
mda 2013年

我只是模糊地理解你...我看不到我可以在哪里“定义”这个问题,推理是必不可少的。
Milind R

几年后,我实际上了解了您:-)
Milind R

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.