c++ - 最大化精度的操作顺序

标签 c++ floating-point precision

我在这些操作中使用 float :

这两者哪个更精确?

  • (a * b)/c

  • (a/c) * b

这到底重要还是要视情况而定?如果可以,在什么情况下应该选择哪个?

最佳答案

真的,如果你不使用 double 那么你就被误导了,你不关心精度。

否则,如果第一个结果略低于下一个更高的 2 次幂,您将获得最佳误差范围。比如计算(pi * e)/sqrt(2),你通过计算(e/sqrt(2)) * pi 得到最佳误差界,因为e/sqrt(2) ≈ 1.922 接近2以下。 结果关闭两个的下一个更高的幂具有更低的相对误差。

对于大量项的加减法,最好先减去大小相等、符号相反的项(如果y/2 ≤ x ≤ 2y 则精确计算x - y ),否则组合数字给出最小的可能的结果。

关于c++ - 最大化精度的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45524072/

相关文章:

c++ - 变量是大小为 1 的数组吗?

c++ - 托管 C++ 与非托管/ native C++ 的性能对比

python - 子类化 float 以强制 python 中的定点打印精度

c# - float 乘法返回意外结果

c++ - 如何提高乘法的精度?

c++ - 向类中添加新成员变量会影响二进制兼容性吗?

c# - 更改类型的签名

c++ - 修改函数以使用 SSE 内在函数

c++ - double 随机数数组

python - 在Python中动态改变浮点精度