Saya baru saja menemukan bahwa vim jelas memungkinkan pembagian dengan nol:
:let a=42/0
:echo a
cetakan 2147483647
(yang merupakan nilai a
).
Apakah ini didokumentasikan di suatu tempat dan mengapa vim memungkinkan pembagian dengan nol?
Saya baru saja menemukan bahwa vim jelas memungkinkan pembagian dengan nol:
:let a=42/0
:echo a
cetakan 2147483647
(yang merupakan nilai a
).
Apakah ini didokumentasikan di suatu tempat dan mengapa vim memungkinkan pembagian dengan nol?
Jawaban:
Perilaku ini didokumentasikan dalam bagian 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)
Inilah alasannya:
42 / 0 tends to +infinity
Dan bagaimana Vim mewakili jumlah terbesar yang tersedia?
2147483647
Lihat :h limits
Selanjutnya, float2nr
dokumentasi fungsi menyatakan:
When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff. NaN results
in -0x80000000.
Jadi, Anda memiliki 2 nomor Anda di sini: + 2147483647
dan - 2147483647
.
Angka terakhir -2147483648
digunakan untuk mewakili NaN
nilai.
Ini dikonfirmasi oleh eval
bagian di atasnya (mea culpa: @cuonglm mempostingnya sebelum saya):
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)
Seperti yang dinyatakan oleh @VanLaser, ini hanya berfungsi untuk integer, untuk angka floating point Anda memiliki konsistensi lebih:
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
Perilaku ini berguna dalam Kalkulus ketika menggunakan sesuatu yang disebut Batas.
Lim n -> 0 ^ + dari 1 / n = + inf
Ini juga dapat ditulis sebagai: As n -> 0 ^ +, 1 / n -> + inf
Bunyinya seperti itu .. Saat n mendekati nol dari kanan, fungsi 1 / n mendekati tak terhingga positif.
Untuk melihat penjelasan visual dari alasan ini, mampir ke http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn
Adapun Vim-script khusus, AFAIK tidak banyak orang melakukan lebih dari logika dan bilangan bulat aritmatika dengannya. Bisa jadi kasus ini kelihatannya merupakan ide yang bagus pada saat itu, dan hanya merupakan artefak warisan pada saat ini.
:echo 42/0.0
lihat hasil lainnya :)