为什么Emacs允许除法为零?

为什么Emacs允许除法为零?,emacs,elisp,Emacs,Elisp,我最近惊讶地发现Emacs允许除法为零: (/ 1.0 0) => 1.0e+INF 这仅适用于浮点数,整数会引发预期错误: (/ 1 0) => Arithmetic error 我试着搜索这个,但找不到有用的东西 这种行为的原因是什么 来自手册:Emacs使用IEEE浮点标准,所有现代计算机都支持该标准 下面是一个很好的解释,解释了IEEE浮点标准的工作原理: 来自手册:Emacs使用IEEE浮点标准,所有现代计算机都支持该标准 下面是一个很好的解释,解释了IEEE浮点标准的

我最近惊讶地发现Emacs允许除法为零:

(/ 1.0 0)
=> 1.0e+INF
这仅适用于浮点数,整数会引发预期错误:

(/ 1 0)
=> Arithmetic error
我试着搜索这个,但找不到有用的东西


这种行为的原因是什么

来自手册:Emacs使用IEEE浮点标准,所有现代计算机都支持该标准

下面是一个很好的解释,解释了IEEE浮点标准的工作原理:

来自手册:Emacs使用IEEE浮点标准,所有现代计算机都支持该标准

下面是一个很好的解释,解释了IEEE浮点标准的工作原理:

这是标准的C行为。这完全是标准的和合乎逻辑的:除以inf-得到你的零。虽然我们习惯于你不能除以0的断言,但它实际上不是真的,所以这个行为实际上比其他行为更正确有限不是一个数字,所以这仍然是正确的。然而,还有更多。所有的计算机运算都是模运算,因为在所有运算中,实际上不仅仅是加减运算,而是加模2^32或类似的运算。因此,在双精度浮点的上下文中,定义了零除,因为它有特殊的值使其工作。你可以认为这些特殊值类似于复数中1的平方根,因为它们需要使一些更大的定理组工作。我在这里提到了模,因为无穷大和nan超出了你通过常规数学可以达到的范围。他们正在扩展数字语言,允许新的实体。如果我们在日常数学中也能做同样的事情,就像我们在复数中引入i一样,我们可以用零除法得到一些z数,它不是实数,也不是复数,甚至不是超越无理数,也不是超现实数这是标准的C行为。这完全是标准的和合乎逻辑的:除以inf-得到你的零。虽然我们习惯于你不能除以0的断言,但它实际上不是真的,所以这个行为实际上比其他行为更正确有限不是一个数字,所以这仍然是正确的。然而,还有更多。所有的计算机运算都是模运算,因为在所有运算中,实际上不仅仅是加减运算,而是加模2^32或类似的运算。因此,在双精度浮点的上下文中,定义了零除,因为它有特殊的值使其工作。你可以认为这些特殊值类似于复数中1的平方根,因为它们需要使一些更大的定理组工作。我在这里提到了模,因为无穷大和nan超出了你通过常规数学可以达到的范围。他们正在扩展数字语言,允许新的实体。如果我们在日常数学中也能做同样的事情,就像我们在复数中引入i一样,我们可以用零除法得到一些z数,它不是实数,也不是复数,甚至不是超越无理数,也不是超现实数