गो के पास एब्स के लिए एक विशेष मामला क्यों है (0)


9

मैं गो के साथ खेल रहा था, और गणित पैकेज में एब्स फ़ंक्शन के लिए यह विशेष दिलचस्प कोड मिला:

http://golang.org/src/pkg/math/abs.go

14 func abs(x float64) float64 {
15      switch {
16      case x < 0:
17          return -x
18      case x == 0:
19          return 0 // return correctly abs(-0)
20      }
21      return x
22  }

हमें x == 0 के विशेष मामले की आवश्यकता क्यों है? यदि मैं लाइन 18 और 19 को हटा दूं तो क्या होगा?

जवाबों:


16

टिप्पणी कारण बताती है - abs(-0)0 वापस करना चाहिए, लेकिन विशेष मामले के बिना, abs(-0)-0 लौटेगा।

मुझे लगता है कि गो का उपयोग IEEE फ़्लोट करता है, इसलिए +0 और -0 दोनों को साइन बिट के लिए विभिन्न मानों का उपयोग करके दर्शाया जा सकता है।


ठीक है, लेकिन 0 और -0 याद में उसी तरह का प्रतिनिधित्व नहीं कर रहे हैं?
user84386

6
@ user84386 - मेरा मानना ​​है कि गो, IEEE फ़्लोट का उपयोग करता है, इसलिए इसमें एक साइन बिट होगा, इसलिए +0 और -0 दोनों प्रतिनिधित्व करने योग्य हैं।
ली

9

IEEE 754 फ़्लोटिंग-पॉइंट मानक हस्ताक्षरित शून्य की अनुमति देता है । एक नकारात्मक शून्य एक सकारात्मक शून्य के बराबर है, इसलिए यह < 0परीक्षण द्वारा कवर नहीं किया जाएगा ।

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