我正在将一些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/