python和cython

时间:2017-08-21 05:10:28

标签: python python-3.x cython

我遇到了一些有趣/奇怪的东西,或者我无法理解/理解的东西。

在这里,

代码 - 1:Python3.5

a = 0.0;
print(type(a));
for i in range(10000):
    a += i;
print(a);
print(type(a));

输出:

<class 'float'>
49995000.0
<class 'float'>

代码 - 2:Cython0.26

%%cython
cdef float a = 0;
print(type(a));
for i in range(10000):
    a += i;
print(a);
print(type(a));

输出:

<class 'float'>
49992896.0
<class 'float'>

我正在运行debian stretch(64位):我在加载%load_ext cython后在我的jupyter笔记本中运行了这些代码。

我假设,python的默认值是float64,因为我运行的是64位操作系统而没有明确设置为使用float32。假设cython从python继承float数据类型。

为什么输出不同?并且差异似乎很大,迭代次数很多 - 这让我认为是截断/舍入尾随位。有人可以解释背后的原因以及如何避免?

修改 这个问题的目的是了解数据类型之间的差异,因此适用于更广泛的受众。

1 个答案:

答案 0 :(得分:2)

在C中,float通常是IEEE single precision,也就是float32。而float64是IEEE双精度。尝试:

cdef double a = 0;