问题描述
考虑:
9223372034707292159. 1 um/mod
例如,它会在我的机器上引发除以零错误。 为什么?除数是 1(不是 0!)并且 9223372034707292159 适合无符号双精度数。
fm/mod 和 sm/rem 也是如此。
我正在使用 Gforth,但这些是核心 Forth 词。
解决方法
请参阅 the specification 以了解 UM/MOD ( ud u1 -- u2 u3 )
:
如果 u1 为零或商位于 超出单单元无符号整数范围。
如果你使用一个单元大小为 32 位的 Forth 系统,那么在给定的情况下,商位于单单元无符号整数的范围之外,然后这是一个不明确的条件,系统的行为是 { {3}} 符合标准。
当然,在这种情况下,“整数溢出”比“被零除”更好。