7

任意精度算术是否会影响数值分析软件

我觉得大多数数值分析软件继续使用相同的浮点数和双精度数。

如果我是对的,我很想知道原因,因为在我看来,有一些计算可以从使用任意精度算术中受益,特别是当它与有理数表示结合使用时,如在GNU Multi-Precision Library上完成。

如果我错了,例子会很好。

4

8 回答 8

7

任意精度很慢。非常慢。而当您使用产生无理值的函数(例如大多数三角函数)时,您将失去任意精度优势。

因此,如果您不需要或不能使用该精度,为什么要花费所有 CPU 时间呢?

于 2009-07-30T21:47:58.153 回答
7

任意精度算术是否会影响数值分析软件?我觉得大多数数值分析软件继续使用相同的浮点数和双精度数。

没有更广泛地使用任意精度 (ap) 有几个不幸的原因。

  • 缺乏对重要特性的支持:缺少 NaN/Infinities 的值,没有复数或特殊函数,舍入模式的实现缺乏或有缺陷(在 GMP 中未实现半舍入),缺乏重要事件的处理程序(丢失有效数字,上溢,下溢......好吧,这在大多数标准库中甚至都没有实现)。为什么这很重要?因为没有它,您必须投入大量精力来以任意精度制定您的问题(曾经在 ap 中编写过复数库或特殊函数?),您无法重现您的双重结果,因为 ap 缺少跟踪更改所需的功能。

  • 99.9% 的程序员对数字根本不感兴趣。这里被问得最多的问题之一是:“为什么 0.1+0.1 不是 0.2 ???? HELP !!!” 那么程序员为什么要花时间学习特定的应用程序实现并在其中制定他们的问题呢?如果您的 ap 结果与 double 结果不同,并且您对数字一无所知,您如何找到错误?双精度是否太不精确?ap 库有错误吗?到底是怎么回事 ?!谁知道....

  • 许多知道如何计算的数值专家不鼓励使用 ap。对 FP 的硬件实现感到沮丧,他们坚持认为再现性无论如何“不可能”实现,并且输入数据几乎总是只有几个有效数字。因此他们主要分析精度损失并重写关键程序以将其最小化。

  • 基准成瘾。哇,我的电脑比别人快。正如其他评论员正确评论的那样,ap 比硬件支持的浮点数据类型慢得多,因为您必须手动使用整数数据类型对其进行编程。这种态度的一个迫在眉睫的危险是,完全没有意识到问题的程序员选择了会吐出令人印象深刻的胡说八道数字的解决方案。我对 GPGPU 非常谨慎。当然,显卡比处理器快得多,但原因不那么精度和准确性。如果您使用浮点数(32 位)而不是双精度数(64 位),则需要计算和传输的位数要少得多。人眼具有很强的容错性,所以一两个结果是否越界都没关系。哎呀,作为硬件构造函数,您可以使用不精确的、严重舍入的计算来加速您的计算(这对于图形来说真的没问题)。扔掉那些讨厌的次正常实现或舍入模式。处理器不如 GPU 快是有充分理由的。

我可以推荐 William Kahans 页面链接文本以获取有关数字问题的一些信息。

于 2009-12-07T21:15:00.100 回答
2

Wolfram 研究所付出了巨大的努力,以务实的方式将任意精度区间算术纳入 Mathematica 的核心,他们做得非常出色。Mathematica 将透明地执行几乎任意精度的任何计算。

于 2010-07-01T22:59:38.477 回答
1

如果您查看像 Mathematica 这样的程序,我强烈怀疑您会发现它们在工作中不使用浮点数和双精度数。如果您查看密码学,您肯定会发现它们不使用浮点数和双精度数(但它们主要使用整数)。

这基本上是一个判断电话。认为他们的产品将从提高的准确性和精度中受益的人使用扩展精度或任意精度算术软件。那些认为不需要精度的人不会使用它。

于 2009-07-30T21:50:38.477 回答
1

任意精度不适用于非理性值。我认为将所有内容颠倒过来将有助于数值分析软件。您应该告诉软件您想要的最终精度是多少,而不是计算计算所需的精度,它会计算出一切。

这样,它可以使用足够大的有限精度类型进行计算。

于 2009-07-30T21:53:40.437 回答
1

您需要一个数值问题的准确答案是非常罕见的——您几乎总是需要某个给定精度的结果。如果由专用硬件执行,操作也是最有效的情况。总而言之,这意味着硬件面临着提供对大多数常见问题具有足够准确性的实现的压力。

因此,经济压力为常见情况创造了一种有效的(即基于硬件的)解决方案。

于 2009-10-30T14:40:53.250 回答
1

Dirk Laurie 的这篇论文提出了一个关于使用可变精度的警示故事。

于 2010-09-06T05:39:42.483 回答
0

虽然与您的问题没有直接关系,但您可能还想看看l Trefethen的这篇论文

于 2012-07-24T22:17:04.620 回答