शून्य द्वारा पूर्णांक विभाजन की अनुमति क्यों देता है?


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

और विम उपलब्ध सबसे बड़ी संख्या का प्रतिनिधित्व कैसे करता है?

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/…
याकूब

मैंने अपना प्रश्न संपादित किया है
nobe4

2147483647 निश्चित रूप से अनंत की तुलना में शून्य के बहुत करीब है। इसलिए, इतनी कम संख्या के साथ अनंत का प्रतिनिधित्व करना मददगार नहीं लगता, कम से कम मेरे लिए नहीं।
रेने न्यफेनेगर

2

एक सीमा नामक चीज का उपयोग करते समय यह व्यवहार पथरी में उपयोगी है।

लिम n -> 0 ^ + का 1 / n = + inf

इसे इस प्रकार भी लिखा जा सकता है: n n -> 0 ^ +, 1 / n -> + inf

इसे ऐसे पढ़ा जाता है .. जैसे n n दाएं से शून्य आता है, फ़ंक्शन 1 / n सकारात्मक अनंत तक पहुंचता है।

इस तर्क का एक दृश्य विवरण देखने के लिए, http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn पर पॉप करें

विशेष रूप से विम-स्क्रिप्ट के लिए, AFAIK बहुत से लोग तर्क और पूर्णांक अंकगणित की तुलना में बहुत अधिक नहीं करते हैं। यह मामला हो सकता है कि यह व्यवहार उस समय एक अच्छे विचार की तरह लग रहा था, और इस बिंदु पर केवल एक विरासत कलाकृति है।


क्या आपके पास अंतिम पैराग्राफ के लिए एक स्रोत है? शून्य से पूर्णांक विभाजन C में अपरिभाषित है, आपके द्वारा देखा गया कोई भी व्यवहार प्रोसेसर आदि पर निर्भर है
muru

ओह, तुम सही हो। मैं पैराग्राफ निकाल रहा हूं।
शेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.