gpt4 book ai didi

c - 预除分母时数值不稳定的风险是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:02:02 26 4
gpt4 key购买 nike

假设我想将一个数字分成多个。

a /= x;
b /= x;
c /= x;
...

因为乘法更快,所以很想这样做

tmp = 1.0f / x;
a *= tmp;
b *= tmp;
c *= tmp;
...

1) 这能保证产生相同的答案吗?我怀疑不是,但一些确认会很好。

2) 如果 x 非常大或非常小,我预计这会导致准确性的显着损失。是否有一个公式可以告诉我我将牺牲多少准确性?

3) 或许没有方便的公式,但我们能否至少陈述一个经验法则,说明数值不稳定性何时会成为问题?是与操作数的大小有关,还是与操作数的大小之间的差异有关?

最佳答案

1) 不,不保证产生相同的答案。即使使用 IEEE,细微的舍入效应也可能导致 1 或 2 的不同 ULP通过使用 a/xa*(1/x) .

2) 如果x非常小(比DBL_MIN(最小归一化正 float )小一点,就次正规而言),1/xINF完全失去精度。 x 也会发生潜在的重大精度损失非常大,比如当 FP 模型不支持次法线时。
通过测试|x|与最大的有限数 <= 1/DBL_MIN和最小的非零 >= 1/DBL_MAX ,代码可以确定何时开始出现严重的准确性损失。公式可能取决于所使用的 FP 模型和 x 的指数以及模型的限制。在 binary64 的范围内, x 的二进制指数之差和 Emin (或 Emax )将是丢失位的一阶估计值。

3) 在上面讨论的范围内出现了显着的数值不稳定性。

关于c - 预除分母时数值不稳定的风险是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28279490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com