Multiplication/division 顺序(?)混乱

Multiplication/division order(?) confusion

我只是在计算球体的体积,没想到

  volume = (4/3)*M_PI*pow(radius, 3);
or
  volume = 4/3*M_PI*pow(radius, 3);

给出 392.699(应该是 523.6)

但是如果我写

volume = 4*M_PI/3*pow(radius, 3);

M_PI*4/3*pow(radius_, 3);

一切都很好。但是

M_PI*(4/3)*pow(radius_, 3);

再次给出错误的结果。我完全不知道为什么会这样..可能我写错了标题,但我只是不明白这里出了什么问题..

4/3在c++中会return1,因为4和3都是整数,两个整数相除会得到整数相除。您可以通过执行浮点除法来解决此问题:4.0/3.0。这将给出预期的输出。

volume = 4*M_PI/3*pow(radius, 3); 起作用的原因是,将一个整数乘以一个双精度数,return 就是一个双精度数。由于 M_PI 是双精度数,因此您会得到预期的输出。