ฉันเพิ่งค้นพบว่าเป็นกลุ่มที่เห็นได้ชัดว่าช่วยให้การหารด้วยศูนย์:
:let a=42/0
:echo a
พิมพ์2147483647
(ซึ่งเป็นค่าของa
)
เอกสารนี้มีอยู่ที่ใดที่หนึ่งและทำไมกลุ่มอนุญาตให้หารด้วยศูนย์?
ฉันเพิ่งค้นพบว่าเป็นกลุ่มที่เห็นได้ชัดว่าช่วยให้การหารด้วยศูนย์:
:let a=42/0
:echo a
พิมพ์2147483647
(ซึ่งเป็นค่าของa
)
เอกสารนี้มีอยู่ที่ใดที่หนึ่งและทำไมกลุ่มอนุญาตให้หารด้วยศูนย์?
คำตอบ:
พฤติกรรมนี้ได้รับการบันทึกไว้ภายใต้ส่วนของ 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)
นี่คือเหตุผล:
42 / 0 tends to +infinity
และ Vim แสดงหมายเลขที่มากที่สุดได้อย่างไร
2147483647
ดู :h limits
นอกจากนี้float2nr
เอกสารคู่มือฟังก์ชั่น:
When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff. NaN results
in -0x80000000.
ดังนั้นคุณได้ที่นี่ 2 หมายเลขของคุณ: และ+ 2147483647
- 2147483647
หมายเลขสุดท้าย-2147483648
ใช้สำหรับแสดงNaN
ค่า
นี่คือการยืนยันโดยeval
ส่วนที่เกี่ยวกับมัน (Mea culpa: @cuonglm โพสต์ไว้ก่อนหน้าฉัน):
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 ระบุว่าจะใช้งานได้เฉพาะกับจำนวนเต็มสำหรับเลขทศนิยมที่คุณมีความมั่นคงมากขึ้น:
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
พฤติกรรมนี้มีประโยชน์ในแคลคูลัสเมื่อใช้สิ่งที่เรียกว่าการ จำกัด
Lim n -> 0 ^ + จาก 1 / n = + inf
สิ่งนี้สามารถเขียนเป็น: เป็น n -> 0 ^ +, 1 / n -> + inf
มันอ่านอย่างนั้น .. เมื่อ n เข้าใกล้ศูนย์จากด้านขวาฟังก์ชัน 1 / n เข้าใกล้อนันต์บวก
หากต้องการดูคำอธิบายภาพของเหตุผลนี้ให้ ดูที่ http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn
สำหรับ Vim-script โดยเฉพาะ AFAIK มีคนไม่มากที่ทำมากกว่าตรรกะและเลขจำนวนเต็ม อาจเป็นได้ว่าพฤติกรรมนี้ดูเหมือนจะเป็นความคิดที่ดีในเวลานั้นและเป็นเพียงสิ่งประดิษฐ์ที่สืบทอดมา ณ จุดนี้
:echo 42/0.0
ดูผลลัพธ์อื่น :)