我正在使用
ctypes
创建 C++ 库 (.so) 的包装器。我在论证的精确性方面遇到了一些麻烦。当我将 math.pi
作为 double
传递时,我只能得到六位小数的精度,即 3.141593000。当我计算正弦和余弦时,这会引入一个小但重要的错误。
据我了解,
double
应该有15位小数精度,而math.pi
确实在Python中给出了15位小数。在这种情况下可能会出现什么问题?还有其他人遇到过这个问题吗?你是怎么解决的?
AFAIK,将
math.pi
传递到 ctypes.c_double
应该返回 c_double(3.141592653589793)
。这是 Python 3.11.1 中的示例:
>>> import math
>>> import ctypes
>>> ctypes.c_double(math.pi)
c_double(3.141592653589793)
我唯一的猜测是您没有使用
ctypes.c_double
,但可能使用其他精度较低的双精度类型。查看 ctypes
类型转换表 以查看所有 ctypes 转换。