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?
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?
Câu trả lời:
Đâ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 float2nr
tà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
và - 2147483647
.
Số cuối cùng -2147483648
được sử dụng để đại diện cho NaN
giá trị.
Điều này được xác nhận bởi eval
phầ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
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.
:echo 42/0.0
xem kết quả khác :)