Ich habe gerade herausgefunden, dass vim offensichtlich die Division durch Null erlaubt:
:let a=42/0
:echo a
druckt 2147483647
(das ist der Wert von a
).
Ist dies irgendwo dokumentiert und warum erlaubt vim die Division durch Null?
Ich habe gerade herausgefunden, dass vim offensichtlich die Division durch Null erlaubt:
:let a=42/0
:echo a
druckt 2147483647
(das ist der Wert von a
).
Ist dies irgendwo dokumentiert und warum erlaubt vim die Division durch Null?
Antworten:
Dieses Verhalten ist im Abschnitt eval dokumentiert :
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)
Hier ist warum:
42 / 0 tends to +infinity
Und wie repräsentiert Vim die größte verfügbare Anzahl?
2147483647
Sehen :h limits
Darüber hinaus heißt es in der float2nr
Funktionsdokumentation:
When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff. NaN results
in -0x80000000.
Sie haben also hier Ihre 2 Nummern: + 2147483647
und - 2147483647
.
Die letzte Zahl -2147483648
wird zur Darstellung des NaN
Wertes verwendet.
Dies wird durch den eval
Abschnitt darauf bestätigt (mea culpa: @cuonglm hat es direkt vor mir gepostet ):
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)
Wie @VanLaser feststellte, funktioniert dies nur für Ganzzahlen, für Gleitkommazahlen haben Sie mehr Konsistenz:
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
Dieses Verhalten ist in Calculus nützlich, wenn Sie ein Limit verwenden.
Lim n -> 0 ^ + von 1 / n = + inf
Dies kann auch geschrieben werden als: As n -> 0 ^ +, 1 / n -> + inf
Es wird so gelesen. Wenn n von rechts gegen Null geht, nähert sich die Funktion 1 / n der positiven Unendlichkeit.
Um eine visuelle Erklärung für diese Argumentation zu erhalten, rufen Sie http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn auf
Was speziell Vim-Script betrifft, machen AFAIK nicht viele Leute viel mehr als Logik und Ganzzahlarithmetik damit. Es könnte der Fall sein, dass dieses Verhalten zu dieser Zeit als gute Idee erschien und zu diesem Zeitpunkt lediglich ein altes Artefakt ist.
:echo 42/0.0
, ein anderes Ergebnis zu sehen :)