为什么非零除数会引发除以零错误?

问题描述

考虑:

9223372034707292159. 1 um/mod

例如,它会在我的机器上引发除以零错误。 为什么?除数是 1(不是 0!)并且 9223372034707292159 适合无符号双精度数。

fm/modsm/rem 也是如此。

我正在使用 Gforth,但这些是核心 Forth 词。

解决方法

请参阅 the specification 以了解 UM/MOD ( ud u1 -- u2 u3 )

如果 u1 为零或商位于 超出单单元无符号整数范围。

如果你使用一个单元大小为 32 位的 Forth 系统,那么在给定的情况下,商位于单单元无符号整数的范围之外,然后这是一个不明确的条件,系统的行为是 { {3}} 符合标准。

当然,在这种情况下,“整数溢出”比“被零除”更好。