python和cython中的默认浮点数据类型

python和cython中的默认浮点数据类型,python,python-3.x,cython,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'> <class 'float'> 49992896.0 <class 'float'>

我遇到了一些有趣/奇怪的事情,或者我无法理解/理解的事情

在这里

代码-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'>
<class 'float'>
49992896.0
<class 'float'>
输出:

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

49992896
我正在运行debian stretch(64位):在加载
%load\u ext cython
后,我在我的jupyter笔记本中运行了这些代码

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

为什么输出不同?随着迭代次数的增加,差异似乎很大——这让我认为是对尾随位的截断/舍入。有人能解释一下背后的原因以及如何避免吗

编辑: 提出这个问题的目的是理解数据类型之间的差异,从而适用于更广泛的受众。

在C中,浮点通常是,也称为浮点32。而浮点64是IEEE双精度。尝试:

cdef double a = 0;
在C语言中,浮点数通常是32。而浮点64是IEEE双精度。尝试:

cdef double a = 0;
可能的重复可能的重复