我正在使用ctypes创建一个C++库(.so)的 Package 器。我在一个论点的精确性上遇到了一些麻烦。当我把math.pi作为double传递时,我只得到了六位小数的精度,即:3.141593000.当我计算西内斯和余弦时,这会引入一个很小但很重要的错误。据我所知,double应该有15个小数位的精度,而math.pi在python中确实有15个小数位。在这种情况下会有什么问题呢?有其他人遇到过这个问题吗?你是怎么解决的?
ctypes
math.pi
double
vd8tlhqk1#
AFAIK,将math.pi传入ctypes.c_double应该返回c_double(3.141592653589793)。下面是Python 3.11.1中的一个例子:
ctypes.c_double
c_double(3.141592653589793)
>>> import math >>> import ctypes >>> ctypes.c_double(math.pi) c_double(3.141592653589793)
我唯一的猜测是,您没有使用ctypes.c_double,而可能是其他精度较低的double类型。查看ctypes type conversion table以查看所有ctypes转换。
1条答案
按热度按时间vd8tlhqk1#
AFAIK,将
math.pi
传入ctypes.c_double
应该返回c_double(3.141592653589793)
。下面是Python 3.11.1中的一个例子:我唯一的猜测是,您没有使用
ctypes.c_double
,而可能是其他精度较低的double类型。查看ctypes
type conversion table以查看所有ctypes转换。