我是Lua的开发者,但最近进入了学习C ++的世界。
我注意到C ++处理数学计算的方式略有不同。而且我想知道是否有正式的名称/解释为什么会发生这种情况,以及是否有办法让它达到我以前的目的。
在Lua中,代码如下;
local a = ( 4 / 3 ) * 3.1415 * ( 5 * 5 * 5 )
print( a ) // This returns 523.58333
在C ++中
int a;
a = ( 4 / 3 ) * 3.1415 * ( 5 * 5 * 5 );
cout << a; // This returns 392
注意虽然方程的语法完全相同,但答案却有所不同。
谢谢:)
答案 0 :(得分:4)
更好的等效代码是:
float a;
a = ( 4 / 3.0 ) * 3.1415 * ( 5 * 5 * 5 );
cout << a;
注意我们如何在除法中使用3.0
,因此它是浮点除法而不是整数除法
答案 1 :(得分:2)
在Lua,你正在做浮动分裂
/: float division
//: floor division
结果是1.333 * 3.145 * (5 * 5*5)
这使它成为523.583
在lua中做这样的事情
local a = ( 4 // 3 ) => 1* 3.1415 * ( 5 * 5 * 5 )
print( a )
你会得到
392.6875 because of (1)*3.1415*5*5*5
当4 // 3(分区)将返回1
如果你想要结果等同于c ++ int
,请使用floorlocal a = ( 4 // 3 ) * 3.1415 * ( 5 * 5 * 5 )
print(math.floor(a))
输出
392
然而,基于类型
,c ++已经很严格了答案 2 :(得分:-2)
尝试将a声明为双,看看会发生什么...... 这样,4/3评估为1,3.14评估为3.这就是你的差异。