有哪些可能导致Python出现NaN的计算?

有哪些可能导致Python出现NaN的计算?,第1张

有哪些可能导致Python出现NaN的计算?

如果您在不使用浮点环境的情况下执行以下任何一项 *** 作,则应该得到一个NaN,而您以前没有使用过NaN:

  • 0/0
    (在顶部和底部都签名)
  • inf/inf
    (在顶部和底部都签名)
  • inf - inf
    (-inf) + inf
    inf + (-inf)
    (-inf) - (-inf)
  • 0 * inf
    inf * 0
    (均在两个因素上均签字)
  • sqrt(x)
    什么时候
    x < 0
  • fmod(x, y)
    y = 0
    x
    无限时; 这
    fmod
    是浮点余数。

机器算术这些方面的规范参考是IEEE
754规范
。第7.1节描述了无效的 *** 作异常,这是您将要获得NaN时引发的异常。IEEE
754中的“异常”意味着与编程语言上下文不同。

许多特殊的函数实现以其尝试实现的功能的奇异点来记录其行为。对于参见手册页

atan2
log
,例如。

您是在专门询问NumPy和SciPy。我不确定这是说“我正在询问有关NumPy幕后发生的机器算术”还是“我正在询问有关

eig()
内容”。我假设是前者,但是此答案的其余部分试图与NumPy中的更高级别函数建立模糊的联系。基本规则是:
如果函数的实现犯了上述错误之一,则将获得NaN。

例如

fft
,对于,
NaN
如果输入值约为
1e1010
或大于,则很容易获得;如果输入值约为
1e-1010
或小于,则有可能导致精度的无声损失。但是,除了真正可笑的扩展输入之外,您还可以放心使用
fft

对于涉及矩阵数学的事情,

inf - inf
如果您的人数众多
矩阵病情严重,NaN可能会出现(通常是通过路线)。关于如何通过数值线性代数进行运算的完整讨论太长了,无法解决。我建议在几个月的时间里翻阅一本数字线性代数书(Trefethen和Bau很流行)。

在编写和调试“不应”生成NaN的代码时,我发现有用的一件事是告诉计算机捕获是否发生NaN。在GNU C中,我这样做:

#include <fenv.h>feenableexcept(FE_INVALID);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存