Tại sao vim cho phép chia số nguyên bằng 0?


16

Tôi mới phát hiện ra rằng vim rõ ràng cho phép chia cho số 0:

:let a=42/0
:echo a

bản in 2147483647(là giá trị của a).

Đây có phải là tài liệu ở đâu đó và tại sao vim cho phép chia cho số 0?


2
Hãy thử :echo 42/0.0xem kết quả khác :)
VanLaser

Câu trả lời:


9

Hành vi này được ghi lại dưới phầ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)

15

Đây là lý do tại sao :

42 / 0 tends to +infinity

Và làm thế nào để Vim đại diện cho số lượng lớn nhất có sẵn?

2147483647

Xem :h limits

Hơn nữa, các float2nrtài liệu chức năng nêu:

When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff.  NaN results
in -0x80000000.

Vì vậy, bạn có ở đây 2 số của bạn: + 2147483647- 2147483647.

Số cuối cùng -2147483648được sử dụng để đại diện cho NaNgiá trị.

Điều này được xác nhận bởi evalphần trên đó (mea culpa: @cuonglm đã đăng nó ngay trước tôi):

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)

Như @VanLaser đã nêu, điều này chỉ hoạt động đối với số nguyên, đối với số dấu phẩy động, bạn có tính nhất quán hơn:

 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

Trong trường hợp đó, tại sao việc chia số âm cho 0 không phải là số tối thiểu? -> vi.stackexchange.com/questions/4623/ấc
Jacob Krall

Tôi đã chỉnh sửa câu hỏi của mình
nobe4

2147483647 chắc chắn là nhiều gần gũi hơn với zero hơn đến vô cùng. Vì vậy, để thể hiện sự vô hạn với một số lượng nhỏ như vậy dường như không hữu ích, ít nhất là đối với tôi.
René Nyffalanger

2

Hành vi này rất hữu ích trong Giải tích khi sử dụng thứ gọi là Giới hạn.

Lim n -> 0 ^ + của 1 / n = + inf

Điều này cũng có thể được viết là: As n -> 0 ^ +, 1 / n -> + inf

Nó được đọc như vậy .. Khi n tiếp cận 0 từ bên phải, hàm 1 / n tiếp cận vô cực dương.

Để xem giải thích trực quan về lý do này, hãy truy cập vào http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn

Đối với Vim-script cụ thể, AFAIK không có nhiều người làm nhiều hơn logic và số học số nguyên với nó. Nó có thể là trường hợp hành vi này có vẻ như là một ý tưởng tốt vào thời điểm đó, và chỉ đơn thuần là một tạo tác di sản vào thời điểm này.


Bạn có một nguồn cho đoạn cuối? Phân chia số nguyên cho số 0 không được xác định trong C, mọi hành vi bạn thấy đều phụ thuộc vào bộ xử lý, v.v.
muru

Oh bạn nói đúng. Tôi đang xóa đoạn văn.
Shane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.