ทำไมกลุ่มอนุญาตให้หารจำนวนเต็มด้วยศูนย์?


16

ฉันเพิ่งค้นพบว่าเป็นกลุ่มที่เห็นได้ชัดว่าช่วยให้การหารด้วยศูนย์:

:let a=42/0
:echo a

พิมพ์2147483647(ซึ่งเป็นค่าของa)

เอกสารนี้มีอยู่ที่ใดที่หนึ่งและทำไมกลุ่มอนุญาตให้หารด้วยศูนย์?


2
ลอง:echo 42/0.0ดูผลลัพธ์อื่น :)
VanLaser

คำตอบ:


9

พฤติกรรมนี้ได้รับการบันทึกไว้ภายใต้ส่วนของ 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

นี่คือเหตุผล:

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

ในกรณีนั้นเหตุใดการหารจำนวนลบเป็น 0 จึงไม่ใช่จำนวนต่ำสุด -> vi.stackexchange.com/questions/4623/…
Jacob Krall

ฉันได้แก้ไขคำถามของฉัน
nobe4

2147483647 แน่นอนมากใกล้ชิดกับศูนย์กว่าที่จะอินฟินิตี้ ดังนั้นการแทนค่าอนันต์ด้วยจำนวนน้อยเช่นนี้ดูเหมือนจะไม่เป็นประโยชน์อย่างน้อยก็ไม่ใช่สำหรับฉัน
René Nyffenegger

2

พฤติกรรมนี้มีประโยชน์ในแคลคูลัสเมื่อใช้สิ่งที่เรียกว่าการ จำกัด

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 มีคนไม่มากที่ทำมากกว่าตรรกะและเลขจำนวนเต็ม อาจเป็นได้ว่าพฤติกรรมนี้ดูเหมือนจะเป็นความคิดที่ดีในเวลานั้นและเป็นเพียงสิ่งประดิษฐ์ที่สืบทอดมา ณ จุดนี้


คุณมีแหล่งที่มาของย่อหน้าสุดท้ายหรือไม่? จำนวนเต็มหารด้วยศูนย์จะไม่ได้กำหนดใน C พฤติกรรมใด ๆ ที่คุณเห็นคือขึ้นอยู่กับหน่วยประมวลผล ฯลฯ
Muru

โอ้คุณพูดถูก ฉันกำลังลบย่อหน้า
เชน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.