代码之家  ›  专栏  ›  技术社区  ›  marnix

为什么(inf+0j)*1==inf+nanj?

  •  11
  • marnix  · 技术社区  · 5 年前
    >>> from numpy import inf, nan
    >>> z = (inf+0j)*1
    (inf+nanj)
    

    为什么?这在我的代码中引起了一个讨厌的错误。

    2 回复  |  直到 5 年前
        1
  •  13
  •   Engineero    5 年前

    这个 1 先转换成复数, 1 + 0j ,这将导致 inf * 0 乘法,结果是 nan .

    (inf + 0j) * 1
    (inf + 0j) * (1 + 0j)
    inf * 1  + inf * 0j  + 0j * 1 + 0j * 0j
    #          ^ this is where it comes from
    inf  + nan j  + 0j + 0
    inf  + nan j
    
        2
  •  0
  •   Paul Panzer    5 年前

    “为什么(inf+0j)*1==inf+nanj”

    实际上,它不是:

    from math import inf,nan
    (inf+0j)*1==inf+nan*1j
    # False