微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scipy.special.cython_special.eval_genleguerre 的错误评估

如何解决scipy.special.cython_special.eval_genleguerre 的错误评估

我正在尝试在 numba jitted 函数中实现 scipy.special.eval_genlaguerre 函数。我尝试使用 cython_special 版本,如下面的代码所示。似乎 cython 对大输入给出了错误的评估。最小工作示例:

import ctypes
from scipy.special import eval_genlaguerre
from numba.extending import get_cython_function_address

_dble = ctypes.c_double
addr = get_cython_function_address('scipy.special.cython_special','__pyx_fuse_0_1eval_genlaguerre')
_c_eval_genlaguerre_functype = ctypes.CFUNCTYPE(_dble,_dble,_dble)
_c_eval_genlaguerre = _c_eval_genlaguerre_functype(addr)

print(_c_eval_genlaguerre(100,200,64))
print(eval_genlaguerre(100,64))
===>  1.4508152430489957e+76
===>  -1.36023128315837e+60

使用 Mathematica 快速检查显示第二个结果是正确的。此外,对较小输入的评估也可以。 我怀疑问题出在函数输入类型上,因为我也有:

print(eval_genlaguerre(100.,64))
===> 1.4508152430489957e+76

类似于 cython 版本(注意第一个参数中的点)。然而,我尝试使用 cython 版本输入类型,但似乎不起作用。

我非常感谢针对此问题的任何解决方案,无论是让 cython-special 版本正常工作,还是使用不同的方式来抖动 eval_genlaguerre 函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。