我正在用C/C++编写一个处理数值的Python扩展。当用户传入的值太大而无法放入浮点时,我希望返回Python代码中表示为inf
的值。如何在C/C++中实现这一点?官方文件中的Floating Point Objects页列出了PyFloat_GetMax()
,但没有列出inf
。我在Python 3.9源代码中搜索了此函数,发现如下内容:
SetDblFlag(DBL_MAX);
SetIntFlag(DBL_MAX_EXP);
SetIntFlag(DBL_MAX_10_EXP);
SetDblFlag(DBL_MIN);
SetIntFlag(DBL_MIN_EXP);
SetIntFlag(DBL_MIN_10_EXP);
SetIntFlag(DBL_DIG);
SetIntFlag(DBL_MANT_DIG);
SetDblFlag(DBL_EPSILON);
SetIntFlag(FLT_RADIX);
SetIntFlag(FLT_ROUNDS);
但这些似乎都不是我想要的。理论上,我可以将1添加到DBL_MAX,但这似乎不是很干净。有什么建议吗
PyFloat_FromDouble
返回给定double
值的float
对象math.h
为IEEE 754 infinity(仅供参考,它是一个有效位为0且指数中所有有效位均为1的浮点)提供了一个宏,您可以将其用作参数另一方面,您可以在Python本身中看到无穷大的这个值:
在这两种情况下,您都可以看到(如果您将十六进制转换为二进制)0符号位、1指数位和0表示位。您还可以看到负无穷大:
与正无穷大相同,但具有前导1符号位
严格地说,Python不采用任何特定的浮点格式;它使用底层平台提供的任何东西。在不使用IEEE 754浮点值的系统上,行为可能不同。特别是,我不知道
INFINITY
(或math.h
本身)的存在是否依赖于IEEE 754,或者是否有相关的C标准要求它相关问题 更多 >
编程相关推荐