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
是双精度数,因此您会得到预期的输出。
我只是在计算球体的体积,没想到
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
是双精度数,因此您会得到预期的输出。