답변:
이유는 다음과 같습니다.
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은 오른쪽에서 0에 가까워 질 때 함수 1 / n은 양의 무한대에 가까워집니다.
이 추론에 대한 시각적 설명을 보려면 http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn으로 이동 하십시오.
Vim 스크립트와 관련하여 AFAIK는 논리 및 정수 산술보다 훨씬 많은 사람들을 수행하지 않습니다. 이 행동은 당시 좋은 생각처럼 보였으며,이 시점에서 단지 레거시 아티팩트 일뿐입니다.
:echo 42/0.0
다른 결과를 보십시오 :)