我刚刚发现vim显然允许除以零:
:let a=42/0
:echo a
打印2147483647
(这是的值a
)。
这是否记录在某处?为什么vim允许被零除?
我刚刚发现vim显然允许除以零:
:let a=42/0
:echo a
打印2147483647
(这是的值a
)。
这是否记录在某处?为什么vim允许被零除?
Answers:
这就是原因:
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
当使用称为极限的东西时,此行为在微积分中非常有用。
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所做的工作并不比逻辑和整数算术更多。可能的情况是,此行为当时似乎是一个好主意,并且在此时仅是遗留的工件。
:echo 42/0.0
查看其他结果:)