简单的数学计算C++和Lua之间的差异
我是一个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
通知如何虽然方程的语法是完全一样的,答案是不同的。
谢谢:)
更好的等效代码为:
float a;
a = (4/3.0) * 3.1415 * (5 * 5 * 5);
cout << a;
注意我们如何在师使用3.0
所以它是一个浮动师,而不是整数除法
尝试声明为双并看看会发生什么...... 这样,4/3计算结果为1,并且还3.14计算结果为3,还有就是你的区别。
这是行不通的。编译器不关心在计算表达式时要分配什么变量,因此'4/3'将保持整数除法。 – HolyBlackCat
这不会解决问题,右边将使用'int'算法来计算,直到* 3.14,但是到时候为时已晚。 – CoryKramer
我站好了。所以,4.0/3。0和双(或浮点)声明是要走的路。 – bocko
在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++是严格基于该类型
'4/3 == 1'因为整数除法,使用'4.0/3.0' – CoryKramer
我想他的意思是四舍五入到1 –
*我注意到C++处理数学计算的方式略有不同。* - 和Java,C和C#等等等等。他们都会做你所遇到的C++代码 - 整数除法。 – PaulMcKenzie