2017-08-29 55 views
0

我是一个Lua开发人员,但最近进入了学习C++的世界。简单的数学计算C++和Lua之间的差异

我注意到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 

通知如何虽然方程的语法是完全一样的,答案是不同的。

谢谢:)

+2

'4/3 == 1'因为整数除法,使用'4.0/3.0' – CoryKramer

+0

我想他的意思是四舍五入到1 –

+1

*我注意到C++处理数学计算的方式略有不同。* - 和Java,C和C#等等等等。他们都会做你所遇到的C++代码 - 整数除法。 – PaulMcKenzie

回答

4

更好的等效代码为:

float a; 
a = (4/3.0) * 3.1415 * (5 * 5 * 5); 
cout << a; 

注意我们如何在师使用3.0所以它是一个浮动师,而不是整数除法

-2

尝试声明为双并看看会发生什么...... 这样,4/3计算结果为1,并且还3.14计算结果为3,还有就是你的区别。

+0

这是行不通的。编译器不关心在计算表达式时要分配什么变量,因此'4/3'将保持整数除法。 – HolyBlackCat

+0

这不会解决问题,右边将使用'int'算法来计算,直到* 3.14,但是到时候为时已晚。 – CoryKramer

+0

我站好了。所以,4.0/3。0和双(或浮点)声明是要走的路。 – bocko

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

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

输出

392 

虽然已C++是严格基于该类型

相关问题