【发布时间】:2015-04-01 12:03:27
【问题描述】:
假设我想将一个数字分成多个。
a /= x;
b /= x;
c /= x;
...
由于乘法更快,所以很容易这样做
tmp = 1.0f / x;
a *= tmp;
b *= tmp;
c *= tmp;
...
1) 这能保证产生相同的答案吗?我怀疑不是,但一些确认会很好。
2) 如果x 非常大或非常小,我预计这可能会导致准确性显着下降。有没有一个公式可以告诉我我会牺牲多少准确度?
3) 也许没有方便的公式,但我们至少可以说明一个经验法则,说明数值不稳定性何时会成为问题?是与操作数的大小有关,还是与操作数的大小之间的差异有关?
【问题讨论】:
-
不同指数的乘除法不会造成比平时更多的损失。然而,指数相差较大的加减法确实会造成很大的损失或精度。
标签: c floating-point numeric ieee-754