我有点失望,np.inf // 2
的计算结果是np.nan
而不是像正常的除法一样是np.inf
。
难道选择nan
比inf
更好吗?我是否遗漏了什么原因?
我有点失望,np.inf // 2
的计算结果是np.nan
而不是像正常的除法一样是np.inf
。
难道选择nan
比inf
更好吗?我是否遗漏了什么原因?
*mod = fmod(vx, wx);
div = (vx - *mod) / wx;
float('inf') % 2
只有意义上的结果是 NaN
,所以当计算 vx - mod
时,得到的结果就是 NaN
,因此整个过程都传播了 NaN。NaN
,因此地板除法的结果也最终变为 NaN
。div = (vx - *mod) / wx;
中的 *mod
替换为其上方等号后面的部分呢? - rautamiekka与取模运算一起构成 divmod 操作的一部分,地板除法是相对于模定义的。
二进制算术运算符
地板除法和模运算符通过以下等式相互连接:
x == (x//y)*y + (x%y)
。地板除法和模也与内置函数 divmod() 相关:divmod(x, y) == (x//y, x%y)
。
这个等式不能适用于 x = inf
——余数 inf % y
未定义——使得 inf // y
不明确。这意味着 nan
至少和 inf
一样好。为简单起见,CPython 实际上只实现了 divmod 并且通过舍弃结果的一部分来推导出 // 和 % — 这意味着 //
从 divmod 继承 nan
。
floor_divide
可能比分别执行这两个操作更有效率。 - Mark Ransominf
是整数除法的错误结果,因为inf
不是整数。虽然nan
也不是整数,但它至少能够表达所提出的问题没有正确答案的事实,也就是说,不存在一个整数x
能使得x*2
等于inf
。这就是我的看法。 - sepp2k