C++和Lua中的简单数学计算的差异

我是Lua开发人员,最近开始学习C ++。

我注意到C ++处理数学运算稍有不同。我想知道这种情况的正式名称/解释是否存在,以及是否有办法使它回到我所习惯的方式。

在Lua中,代码如下;

local a = (4/3)* 3.1415 * (5 * 5 * 5)
print (a) //这将返回523.58333

在C ++中

int a;
a = (4/3)* 3.1415 * (5 * 5 * 5);
cout << a; //这将返回392

注意,尽管方程式的语法完全相同,但答案不同。

谢谢 :)

点赞
用户2678576
用户2678576

尝试将a声明为双精度浮点型,看会发生什么......这样,4/3就会计算为1,而3.14则计算为3。这就是你们之间的差异。

2017-08-29 21:33:13
用户446717
用户446717

更好的等价代码是:

浮点数 a;
a = ( 4 / 3.0 ) * 3.1415 * ( 5 * 5 * 5 );
cout << a;

注意我们在划分时使用 3.0 以进行浮点数划分而不是整数划分。

2017-08-29 21:34:45
用户7590993
用户7590993

Lua中使用浮点数除法

/: 浮点数除法
//: 向下取整除法

结果为1.333 * 3.145 * (5 * 5 * 5),结果为523.583

在Lua中可以这样做:

local a = (4 // 3) => 1 * 3.1415 * (5 * 5 * 5)
print(a)

你将得到

因为 (1)*3.1415*5*5*5,得到 392.6875

因为4//3(向下取整除法)将返回1

如果您想要与C++ int等价的结果,请使用floor

local a = ( 4 // 3 ) * 3.1415 * ( 5 * 5 * 5 )
print(math.floor(a))

输出:

392

而C++已经严格基于类型。

2017-08-29 21:43:02