Cython的计算不正确

Non*_*one 7 python pi cython

我实现了Madhava-Leibniz系列来计算Python中的pi,然后在Cython中提高速度.Python版本:

from __future__ import division
pi = 0
l = 1
x = True
while True:
    if x:
        pi += 4/l
    else:
        pi -= 4/l
    x = not x
    l += 2
    print str(pi)
Run Code Online (Sandbox Code Playgroud)

Cython版本:

cdef float pi = 0.0
cdef float l = 1.0
cdef unsigned short x = True
while True:
    if x:
        pi += 4.0/l
    else:
        pi -= 4.0/l
    x = not x
    l += 2
    print str(pi)
Run Code Online (Sandbox Code Playgroud)

当我停止Python版本时,它已正确计算pi为3.141592.Cython版本最终以3.141597结束,有一些我不记得的数字(我的终端崩溃),但是不正确.为什么Cython版本的计算不正确?

Sve*_*ach 18

您正在使用floatCython版本 - 这是单精度!double相反,使用它对应于Python float(有趣的是).C类型float只有大约8位有效十进制数字,而doublePython或者float大约有16位数字.