我试图在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,表达式将被评估为:
我还尝试分解表达式的每个部分,以检查是否像&#34; pow()&#34;功能正常工作或M_PI是否准确,但在我一次评估所有内容之前,一切似乎都是一致的。
我错过了什么,为什么我的答案不正确?
我已经看了很长一段时间这段代码了,我似乎无法弄清楚发生了什么。我认为这可能是某种精确错误?
答案 0 :(得分:6)
(4 / 3)
这个子表达式有两个整数参数,所以它将用整数数学来完成。除法的结果被截断,因此结果为1.333333f
而不是1
。
您可以通过使一个或两个数字浮点常数来修复它。
(4.0 / 3.0)