为什么vim允许整数除以零?


Answers:


9

此行为记录在eval部分

When dividing a Number by zero the result depends on the value:
      0 / 0  = -0x80000000  (like NaN for Float)
     >0 / 0  =  0x7fffffff  (like positive infinity)
     <0 / 0  = -0x7fffffff  (like negative infinity)
    (before Vim 7.2 it was always 0x7fffffff)

15

这就是原因:

42 / 0 tends to +infinity

Vim如何代表最大的可用数量?

2147483647

看到 :h limits

此外,float2nr功能文档指出:

When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff.  NaN results
in -0x80000000.

所以你在这里有两个数字:+ 2147483647- 2147483647

最后一个数字-2147483648用于表示NaN值。

这已经eval在上面的部分中得到了证实(mea culpa:@cuonglm在我面前发布了它):

When dividing a Number by zero the result depends on the value:
    0 / 0  = -0x80000000    (like NaN for Float)
   >0 / 0  =  0x7fffffff    (like positive infinity)
   <0 / 0  = -0x7fffffff    (like negative infinity)

如@VanLaser所述,这仅适用于整数,对于浮点数,您具有更高的一致性:

 1/0.0     =  inf
 1/0.0 + 1 =  inf
 1/0.0 - 1 =  inf

-1/0.0     = -inf
-1/0.0 - 1 = -inf
-1/0.0 + 1 = -inf

在那种情况下,为什么负数除以0而不是最小数?- > vi.stackexchange.com/questions/4623/...
雅各布Krall的

我已经编辑了问题
2015年

2147483647肯定是多少,而不是无限接近于零。因此,用这么小的数字表示无穷大似乎没有帮助,至少对我而言没有。
勒Nyffenegger

2

当使用称为极限的东西时,此行为在微积分中非常有用。

Lim n-> 0 ^ + of 1 / n = + inf

也可以写成:as n-> 0 ^ +,1 / n-> + inf

就像这样读。当n从右边接近零时,函数1 / n接近正无穷大。

要查看此推理的直观说明,请跳至 http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn

具体来说,对于Vim脚本,AFIAK所做的工作并不比逻辑和整数算术更多。可能的情况是,此行为当时似乎是一个好主意,并且在此时仅是遗留的工件。


您有最后一段的资料吗?整数除以零用C未定义,你看到任何行为取决于在处理器上,等等
穆鲁

哦,对了。我要删除该段。
Shane
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.