Mengapa vim memungkinkan pembagian bilangan bulat dengan nol?

16

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?

René Nyffenegger
sumber
2
Coba :echo 42/0.0lihat hasil lainnya :)
VanLaser

Jawaban:

9

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)
cuonglm
sumber
15

Inilah alasannya:

42 / 0 tends to +infinity

Dan bagaimana Vim mewakili jumlah terbesar yang tersedia?

2147483647

Lihat :h limits

Selanjutnya, float2nrdokumentasi 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: + 2147483647dan - 2147483647.

Angka terakhir -2147483648digunakan untuk mewakili NaNnilai.

Ini dikonfirmasi oleh evalbagian 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
nobe4
sumber
Dalam hal itu, mengapa pembagian angka negatif dengan 0 bukan angka minimum? -> vi.stackexchange.com/questions/4623/...
Jacob Krall
Saya telah mengedit pertanyaan saya
nobe4
2147483647 tentu saja jauh lebih dekat ke nol daripada hingga tak terbatas. Jadi, untuk merepresentasikan ketakberhinggaan dengan jumlah kecil seperti itu sepertinya tidak membantu, setidaknya bagi saya.
René Nyffenegger
2

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.

Shane
sumber
Apakah Anda memiliki sumber untuk paragraf terakhir? Pembagian
bilangan bulat
Oh kamu benar Saya menghapus paragraf.
Shane