मुझे अभी पता चला है कि विम स्पष्ट रूप से शून्य से विभाजन की अनुमति देता है:
: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
और विम उपलब्ध सबसे बड़ी संख्या का प्रतिनिधित्व कैसे करता है?
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
एक सीमा नामक चीज का उपयोग करते समय यह व्यवहार पथरी में उपयोगी है।
लिम 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 बहुत से लोग तर्क और पूर्णांक अंकगणित की तुलना में बहुत अधिक नहीं करते हैं। यह मामला हो सकता है कि यह व्यवहार उस समय एक अच्छे विचार की तरह लग रहा था, और इस बिंदु पर केवल एक विरासत कलाकृति है।
:echo 42/0.0
एक और परिणाम देखने की कोशिश करें :)