IEEE-754浮点数:先除还是乘以得到最佳精度?

问题描述 投票:5回答:2

如果我想在使用IEEE-754浮点值的计算中保持尽可能高的精度,那会更好:

a = b * c / d

a = b / d * c

有区别吗?如果存在,是否取决于输入值的大小?而且,如果大小很重要,那么在知道值的一般大小时如何确定最佳排序?

ieee-754
2个回答
2
投票

假设所有操作都不会产生上溢或下溢,并且您的输入值具有均匀分布的有效位数,那么这是等效的。好吧,我想要有一个严格的证明,应该做一个详尽的测试(实际上,双精度测试是不可能的,因为有2 ^ 156个输入),但是如果平均误差有差异,那么它就很小了。我可以使用Sipe以较低的精度尝试。

在任何情况下,在没有上溢/下溢的情况下,仅有效数字的确切值很重要,而指数则无所谓。

但是,如果结果a被添加到另一个表达式中(或从中减去)并且未被重用,则从除法开始可能会更有趣,因为您可以使用FMA将乘法与以下加法分组(因此进行一次四舍五入)。


3
投票

取决于值的大小。显然,如果一个人被零除,那么所有投注都将关闭,但是如果一个乘法或除法导致denormal,则后续运算可能会失去精度。

[您可能会发现研究Goldberg的开创性论文What Every Computer Scientist Should Know About Floating-Point Arithmetic非常有用,该论文将比您可能会在此处收到的任何答案更好地解释事情。 (Goldberg是IEEE-754的原始作者之一。)

© www.soinside.com 2019 - 2024. All rights reserved.