Je viens de découvrir que vim permet évidemment la division par zéro:
:let a=42/0
:echo a
imprime 2147483647
(qui est la valeur de a
).
Est-ce documenté quelque part et pourquoi vim permet-il la division par zéro?
Je viens de découvrir que vim permet évidemment la division par zéro:
:let a=42/0
:echo a
imprime 2147483647
(qui est la valeur de a
).
Est-ce documenté quelque part et pourquoi vim permet-il la division par zéro?
Réponses:
Ce comportement est documenté dans la section 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)
Voici pourquoi:
42 / 0 tends to +infinity
Et comment Vim représente le plus grand nombre disponible?
2147483647
Voir :h limits
De plus, la float2nr
documentation de la fonction indique:
When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff. NaN results
in -0x80000000.
Vous avez donc ici vos 2 numéros: + 2147483647
et - 2147483647
.
Le dernier nombre -2147483648
est utilisé pour représenter la NaN
valeur.
Ceci est confirmé par la eval
section à ce sujet (mea culpa: @cuonglm l'a posté juste avant moi):
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)
Comme l'a indiqué @VanLaser, cela ne fonctionne que pour les nombres entiers, pour le nombre à virgule flottante, vous avez plus de cohérence:
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
Ce comportement est utile dans le calcul lorsque vous utilisez quelque chose appelé une limite.
Lim n -> 0 ^ + de 1 / n = + inf
Cela peut aussi s'écrire: As n -> 0 ^ +, 1 / n -> + inf
Elle se lit ainsi. Comme n s'approche de zéro par la droite, la fonction 1 / n s'approche de l'infini positif.
Pour voir une explication visuelle de ce raisonnement, passez à http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn
En ce qui concerne le script Vim en particulier, AFAIK peu de gens en font beaucoup plus que la logique et l'arithmétique entière. Il pourrait être le cas que ce comportement semblait être une bonne idée à l'époque, et n'est simplement qu'un artefact hérité à ce stade.
:echo 42/0.0
de voir un autre résultat :)