Az önce vim'in sıfıra bölmeye izin verdiğini keşfettim:
:let a=42/0
:echo a
yazdırır 2147483647
(değeri a
).
Bu bir yerde belgelenmiş mi ve vim neden sıfıra bölünmeye izin veriyor?
Az önce vim'in sıfıra bölmeye izin verdiğini keşfettim:
:let a=42/0
:echo a
yazdırır 2147483647
(değeri a
).
Bu bir yerde belgelenmiş mi ve vim neden sıfıra bölünmeye izin veriyor?
Yanıtlar:
Bu davranış, eval bölümünde belgelenmiştir :
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)
İşte nedeni:
42 / 0 tends to +infinity
Ve Vim mevcut en büyük sayıyı nasıl temsil ediyor?
2147483647
Görmek :h limits
Ayrıca, float2nr
fonksiyon belgeleri şunları belirtir:
When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff. NaN results
in -0x80000000.
Burada 2 numaranız var: + 2147483647
ve - 2147483647
.
Son sayı -2147483648
, NaN
değeri temsil etmek için kullanılır .
Bu, eval
üzerindeki bölüm tarafından onaylandı (mea culpa: @cuonglm hemen önümde yayınladı ):
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'ın belirttiği gibi, bu sadece tamsayı için çalışır, kayan nokta sayısı için daha tutarlısınız:
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
Bu davranış, Hesaplama'da Limit adı verilen bir şey kullanırken yararlıdır.
Lim n -> 0 ^ + / 1 / n = + inf
Bu ayrıca şu şekilde de yazılabilir: As n -> 0 ^ +, 1 / n -> + inf
Bu şekilde okunur. N sağdan sıfıra yaklaştıkça 1 / n fonksiyonu pozitif sonsuza yaklaşır.
Bu gerekçenin görsel bir açıklamasını görmek için http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn adresine gidin.
Özellikle Vim-script'e gelince, AFAIK pek çok insan onunla mantık ve tamsayı aritmetiğinden daha fazlasını yapmaz. Bu davranış o sırada iyi bir fikir gibi görünebilir ve bu noktada sadece eski bir eserdir.
:echo 42/0.0
Başka bir sonuç görmeye çalışın :)