如何使 Python ufuncs 变为 return 大于正常浮点大小限制的浮点数?

How to get Python ufuncs to return floats larger than the normal float size limit?

我有一个 NumPy 数组,其中包含一个略高于 260 的数字,我是 运行 来自 scipy.specialgamma ufunc,目前 returns inf 用于数组的这个条目,因为结果超过 1e514,并且 Python 通常可以处理的最大浮点数约为 1.8e308。我曾尝试将我的数组更改为 float128 类型,希望这能解决问题,但没有,这导致我收到错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ufunc 'gamma' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

是否有解决此错误的方法,或者 Python ufunc 无法处理超过 1.8e308 的所有浮点数?

ufuncs 使用高度优化的 C 代码来执行所需的操作。 C 默认使用 64 位运算,所以 ufuncs 不能执行比 64 位更精确的运算。

不过,我找到了解决此问题的方法,方法是将我的 Python 代码转换为 Julia 并使用 BigFloat 类型进行任意精度运算。 Python 具有用于任意精度算术的 mpmath,但 mpmath 的函数不能在 NumPy 数组上 运行 并且我的代码大量使用数组。 Julia 中的 BigFloat 类型与大多数函数兼容,并且 Julia 中的大多数函数可以 运行 在数组上没有问题,所以我的 Julia 代码 运行 没有任何重大问题。