在VSCode中运行Jupyter笔记本时,我对Cython无保护分区指令有着奇怪的行为。正在启动与的会话 %load_ext 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我得到:
simpleTest(x)
x
ValueError:数学域错误
但是没有 @cython.cdivision(True) 指令它适用于所有人 x >0,这是应该的。为什么指令会破坏这个计算?有更好的方法吗?
@cython.cdivision(True)
你告诉Cython像C中那样除法。在C中,整数除法产生整数结果,向0取整。
在C划分的情况下, 2/d 是 0 对于 d > 2 。你正试图取0的对数。
2/d
0
d > 2