在 VSCode 中运行 Jupyter 笔记本时,我遇到了 Cython 不受保护的除法指令的奇怪行为。使用 启动会话%load_ext cython
,运行:
%%cython
import math
cimport cython
@cython.cdivision(True)
def simpleTest(int d):
cdef double c = 1/math.exp(math.log(math.sqrt(2/d)))
return c
现在运行simpleTest(x)
,对于x
>= 3 的任何值,我得到:
ValueError:数学域错误
但在没有该@cython.cdivision(True)
指令的情况下运行,它对所有x
> 0 都可以正常工作,正如它应该的那样。为什么该指令会破坏这种计算?有更好的方法吗?