考虑这些数值精度问题:
import numpy as np
np.log10(1e-324) # -inf & divide-by-zero
np.log10(1e+309) # +inf
np.round(x, +308) # inf
np.round(x, +309) # nan
np.round(x, -308) # nan这些数字足以导致溢出(?)在我的电脑上。
在numpy中,与此相关的文档在哪里?我怎样才能准确地预测这些值呢?
发布于 2020-12-11 10:00:24
相关的完整文档可能不是NumPy本身,而是遵循IEEE754标准。
对此的一个很好的解释是在GeeksforGeeks标准754浮点数中。
该标准还规定了对非数字操作数(无穷大、NANs)的基本数学运算的结果--请参阅我上面链接中的页尾--当处理器执行NumPy函数的算法时(如示例中的np.log10()或np.round() ),处理器的浮点单元(FPU)遵循它们。
NumPy (和Python)自己执行的是
1e+309)到无穷大的隐式转换,1e-324)隐式转换为零,因此,np.log10(1e-324)被计算为np.log10(0),这在理论上是不存在的,但是尽管如此,算法还是使用这个零值来计算它(有效地计算了极限)。
在执行此计算过程中,该算法会被除以零,但该算法捕获ZeroDivisionError异常并代之以RuntimeWarning,因为它认为这个零值是一个“正”零,即可以将(正或负)有限数除以它(给出正无穷大或负无穷大的结果)。
结果是负无穷大,当然,越来越小的正值(“无限小”小值)的对数极限。
发布于 2020-12-11 09:18:07
数据类型记录在数据类型中。NumPy支持float64类型,它提供了从1.7976931348623158E+308到2.2250738585072014E-308的范围。
https://stackoverflow.com/questions/65248379
复制相似问题