c++ - C++中除法和乘法特殊顺序的原因

标签 c++ double math

我正在将一些 C++ 代码移植到 Java 中,并且我不断遇到编写它的人不断执行以下操作的实例:

double c = (1.0/(a+1.0)*pow(b, a+1.0));
double d = (1./(integral(gamma, dmax)-integral(gamma, dmin)))*(integral(gamma+1, dmax)-integral(gamma+1, dmin));

代替:

double c = pow(b, a+1.0)/(a+1.0);
double d = (integral(gamma+1, dmax)-integral(gamma+1, dmin))/(integral(gamma, dmax)-integral(gamma, dmin));

第二个似乎更清楚,除非我对 C++ 中的操作顺序有误,否则它们应该做同样的事情。有什么理由做第一个而不是第二个吗?我唯一能想到的就是一些精确的奇怪案例。

最佳答案

是的,它们是一样的。我能想到的唯一原因是数学上的清晰度:有时当你对一个数量进行归一化时,你经常会这样写:

answer = (1/total) * (some of it)

比如柯西积分定理常写成

f(a) = (1/(2*pi*i)) * integral(f(z)/(z-a), dz)

关于c++ - C++中除法和乘法特殊顺序的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840497/

相关文章:

swift - 双字符串格式化疯狂

algorithm - 字符串的成对独立哈希函数?

math - float 学坏了吗?

c++ - 为什么链接顺序会影响使用宏的测试的测试结果?

c++ - 与字符串文字 C++ 的比较

java - 用某些小数创建 0.000..

fortran - Fortran 中的实数同时使用科学记数法和下划线类型说明符

c++ - 为 GreedyProjectionTriangulation 配置 VS2010

c++ - 无法弄清楚在函数之后类中没有正确的变量值有什么问题等等

CSS Nth Child 根据 N 计算顶部高度