与Python、C和JavaScript的舍入差异
我正在尝试乘以数字,而不同的语言会产生不同的结果。这是数学问题:
x = 3.0524116
y = 57325
z = x * y
使用 Python(还有 JavaScript),z是174979.49123897057. 演示代码如下所示。
import numpy as np
x = np.float32(3.0524116)
y = np.uint32(57325)
z = x * y
print(z)
与 C,z是174979.500000。演示代码如下所示。
#include <stdio.h>
int main()
{
float x = 3.0524116f;
unsigned int y = 57325;
float z = x * y;
printf("%fn", z);
return 0;
}
现在,当z在 C 中四舍五入为整数时,已在 Python 中初始化的缓冲区溢出,整个事情都崩溃了……无论如何,这里发生了什么?为什么结果不一样?
回答
如果我float在 C 中使用而不是double. Python 的float类型和 JavaScript的类型Number实际上是用 C 实现double的,因此如果您希望 C 的行为相同,请使用double,而不是float。