Acabo de descubrir que vim obviamente permite la división por cero:
:let a=42/0
:echo a
impresiones 2147483647
(que es el valor de a
).
¿Está documentado en alguna parte y por qué vim permite la división por cero?
Acabo de descubrir que vim obviamente permite la división por cero:
:let a=42/0
:echo a
impresiones 2147483647
(que es el valor de a
).
¿Está documentado en alguna parte y por qué vim permite la división por cero?
Respuestas:
Este comportamiento está documentado en la sección 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)
Aquí es por qué:
42 / 0 tends to +infinity
¿Y cómo representa Vim el mayor número disponible?
2147483647
Ver :h limits
Además, la float2nr
documentación de la función establece:
When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff. NaN results
in -0x80000000.
Entonces tienes aquí tus 2 números: + 2147483647
y - 2147483647
.
El último número -2147483648
se usa para representar el NaN
valor.
Esto se confirma en la eval
sección (mea culpa: @cuonglm lo publicó justo antes que yo):
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)
Como dijo @VanLaser, esto solo funciona para números enteros, para el número de coma flotante tiene más consistencia:
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
Este comportamiento es útil en Cálculo cuando se usa algo llamado Límite.
Lim n -> 0 ^ + de 1 / n = + inf
Esto también se puede escribir como: Como n -> 0 ^ +, 1 / n -> + inf
Se lee así. Cuando n se aproxima a cero desde la derecha, la función 1 / n se aproxima a infinito positivo.
Para ver una explicación visual de este razonamiento, vaya a http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn
En cuanto a Vim-script específicamente, AFAIK no mucha gente hace mucho más que lógica y aritmética de enteros con él. Podría ser el caso de que este comportamiento parecía una buena idea en ese momento, y es simplemente un artefacto heredado en este momento.
:echo 42/0.0
ver otro resultado :)