简单的数学计算在C ++和Lua之间有所不同

时间:2017-08-29 21:27:40

标签: c++ math lua

我是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

注意虽然方程的语法完全相同,但答案却有所不同。

谢谢:)

3 个答案:

答案 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

,请使用floor
local a = ( 4 // 3 ) * 3.1415 * ( 5 * 5 * 5 )
print(math.floor(a))

输出

392

然而,基于类型

,c ++已经很严格了

答案 2 :(得分:-2)

尝试将a声明为双,看看会发生什么...... 这样,4/3评估为1,3.14评估为3.这就是你的差异。