C++中除法和乘法特殊排序的原因

job*_*job 3 c++ math double

我正在将一些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));
Run Code Online (Sandbox Code Playgroud)

代替:

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));
Run Code Online (Sandbox Code Playgroud)

第二个似乎更清楚,除非我对C++中的操作顺序错了,否则他们应该做同样的事情.有没有理由做第一个而不是第二个?我唯一能想到的就是精确的一些奇怪的情况.

Jes*_*der 6

是的,他们是一样的.我能想到的唯一原因是数学清晰度:有时当你对数量进行标准化时,你经常写:

answer = (1/total) * (some of it)
Run Code Online (Sandbox Code Playgroud)

例如,经常编写柯西的积分定理

f(a) = (1/(2*pi*i)) * integral(f(z)/(z-a), dz)
Run Code Online (Sandbox Code Playgroud)