提问人:supvato 提问时间:10/12/2023 更新时间:10/12/2023 访问量:30
Python ctypes 精度
python ctypes precision
问:
我用来在 C++ 库 (.so) 上创建一个包装器。我在论证的精确性方面遇到了一些麻烦。当我以 a 的身份传递时,我只得到小数点后六位的精度,即 3.141593000。当我计算正弦和余弦时,这引入了一个小而显着的误差。ctypes
math.pi
double
据我了解,应该有 15 位小数的精度,并且在 python 中确实给出了 15 位小数。在这种情况下可能有什么问题?还有其他人遇到过这个问题吗?你是怎么解决的?double
math.pi
答:
0赞
schlöpp
10/12/2023
#1
AFAIK,传入应该返回.下面是 Python 3.11.1 中的示例:math.pi
ctypes.c_double
c_double(3.141592653589793)
>>> import math
>>> import ctypes
>>> ctypes.c_double(math.pi)
c_double(3.141592653589793)
我唯一的猜测是你没有使用 ,但也许是其他一些精度较低的双精度类型。查看 ctypes
类型转换表以查看所有 ctypes 转换。ctypes.c_double
评论
0赞
supvato
10/12/2023
你是对的,应该做这项工作。我发现了问题所在。在进程中间的某个地方,它被存储为字符串,用于解析它,然后它被解析回双精度。这大大降低了精度。感谢您的帮助!c_double
double
'%e'
评论
ctypes
double
c_double
c_longdouble
double
long double
c_double
double