2017-02-16 13 views
5

रूबी 2.4 फ़्लोटिंग पॉइंट नंबरों को गोल करने के लिए गॉसियन राउंडिंग का उपयोग करता है।रुबी में फ्लोट राउंडिंग चेंज 2.4

विकिपीडिया के अनुसार:

एक टाई को तोड़ने नियम यह है कि कम पक्षपाती है (यहां तक ​​कि जब मूल संख्या सकारात्मक या असमान संभावना के साथ नकारात्मक हैं) दौर आधा भी है। इस सम्मेलन से, यदि y का अंश 0.5 है, तो q y के नजदीक भी पूर्णांक है। इस प्रकार, उदाहरण के लिए, +23.5 +24 बन जाता है, जैसा +24.5 करता है; जबकि -23.5 बनता है -24, जैसा -24.5 करता है।

हालांकि, रूबी 2.4 में निम्न कोड को निष्पादित करने से अपेक्षाकृत एक अलग आउटपुट उत्पन्न होता है।

[1.5, 2.5, 3.5, 4.5, 5.5].each { | num | puts num.round } 
# output: 
2 
3 
4 
5 
6 
# expected output(based on Gaussian rounding): 
2 
2 
4 
4 
6 

क्या कोई समझा सकता है कि ऐसा क्यों है या मुझे क्या याद आ रहा है?

उत्तर

7

गॉसियन राउंडिंग लागू करने के लिए, आपको कीवर्ड तर्क :half पास करना होगा।

कीवर्ड तर्क :half या तो :down या :even ले सकता है और डिफ़ॉल्ट व्यवहार अभी भी उतना ही बढ़िया है, जैसा कि पहले था।

# ruby 2.4.0-rc1 
irb(main):001:0> (2.5).round 
# => 3 
irb(main):008:0> (2.5).round(half: :down) 
# => 2 
irb(main):009:0> (2.5).round(half: :even) 
# => 2 

इस निर्णय की पृष्ठभूमि this blog post में है।

संबंधित मुद्दे