gpt4 book ai didi

python - long double returns 和 ctypes

转载 作者:太空狗 更新时间:2023-10-29 20:30:58 26 4
gpt4 key购买 nike

我有一个返回 long double 的 c 函数。我想使用 ctypes 从 python 调用这个函数,它大部分都有效。设置 so.func.restype = c_longdouble 就可以了——除了 python 的 float 类型是 c_double 所以如果返回值大于 double,但正好在long double 的边界,python 仍然获取 inf 作为返回值。我在 64 位处理器上,sizeof(long double) 是 16。

关于在不修改 C 代码的情况下解决这个问题(例如使用 decimal 类或 numpy)的任​​何想法?

最佳答案

我不确定您是否可以在不修改 C 代码的情况下做到这一点。 ctypes 似乎对 long double 的支持真的很差s - 你根本不能像数字一样操纵它们,你所能做的就是在原生 float 之间来回转换它们Python 类型。

您甚至不能使用字节数组作为返回值而不是 c_longdouble ,因为 ABI - 浮点值不会在 %eax 中返回像正常的返回值一样注册或在堆栈上,它们通过硬件特定的浮点寄存器传递。

关于python - long double returns 和 ctypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/423404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com