为什么这个表达式没有正确评估?

时间:2016-05-27 16:20:21

标签: c++

我试图在C ++中评估以下表达式。我使用Visual Studio(当前版本),如果这有任何区别。

#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>

std::cout << (1.686 * 1000 / (4 / 3) / M_PI / (pow(0.015, 3)) / 3340);

现在,当我执行程序时,输出为:

47608.8

然而,如果我使用WolframAlpha,表达式将被评估为: Wolfram's result

我还尝试分解表达式的每个部分,以检查是否像&#34; pow()&#34;功能正常工作或M_PI是否准确,但在我一次评估所有内容之前,一切似乎都是一致的。

我错过了什么,为什么我的答案不正确?

我已经看了很长一段时间这段代码了,我似乎无法弄清楚发生了什么。我认为这可能是某种精确错误?

1 个答案:

答案 0 :(得分:6)

(4 / 3)

这个子表达式有两个整数参数,所以它将用整数数学来完成。除法的结果被截断,因此结果为1.333333f而不是1

您可以通过使一个或两个数字浮点常数来修复它。

(4.0 / 3.0)