अपने प्रश्न के पहले भाग का जवाब देने के लिए: नहीं, पायथन इस कार्यक्षमता को सीधे प्रदान नहीं करता है। लेकिन यह एक पायथन समारोह लिखना काफी आसान है जो यह करता है, आईईईई 754 फ्लोटिंग पॉइंट मानता है।
आईईईई 754 बाइनरी फ्लोटिंग-पॉइंट प्रारूपों को चालाकी से डिजाइन किया गया है ताकि एक फ्लोटिंग-पॉइंट नंबर से 'अगले' तक जाने से थोड़ा सा प्रतिनिधित्व बढ़ सके। यह [0, infinity)
श्रेणी में किसी भी संख्या के लिए काम करता है, दाएं सीमाओं और उपनामों में। nextUp
का एक संस्करण तैयार करने के लिए जो पूर्ण फ़्लोटिंग-पॉइंट रेंज को कवर करता है, आपको ऋणात्मक संख्या, infinities, नैन, और नकारात्मक शून्य से जुड़े एक विशेष मामले से निपटने की भी आवश्यकता है। नीचे पायथन में आईईईई 754 के nextUp
फ़ंक्शन का मानकों का अनुपालन संस्करण है। इसमें सभी कोने के मामलों को शामिल किया गया है।
import math
import struct
def next_up(x):
# NaNs and positive infinity map to themselves.
if math.isnan(x) or (math.isinf(x) and x > 0):
return x
# 0.0 and -0.0 both map to the smallest +ve float.
if x == 0.0:
x = 0.0
n = struct.unpack('<q', struct.pack('<d', x))[0]
if n >= 0:
n += 1
else:
n -= 1
return struct.unpack('<d', struct.pack('<q', n))[0]
nextDown
और nextAfter
के कार्यान्वयन तो इस तरह दिखेगा। (ध्यान दें कि nextAfter
आईईईई 754 द्वारा निर्दिष्ट एक फ़ंक्शन नहीं है, इसलिए आईईईई विशेष मूल्यों के साथ क्या होना चाहिए, इसके बारे में अनुमान लगाया गया है। यहां मैं आईबीएम डेसिमल अंकगणितीय मानक का पालन कर रहा हूं कि पायथन की decimal.Decimal
कक्षा आधारित है।)
def next_down(x):
return -next_up(-x)
def next_after(x, y):
# If either argument is a NaN, return that argument.
# This matches the implementation in decimal.Decimal
if math.isnan(x):
return x
if math.isnan(y):
return y
if y == x:
return y
elif y > x:
return next_up(x)
else:
return next_down(x)
स्रोत
2012-05-03 06:10:52
मुझे विश्वास नहीं है, लेकिन यह देखने का प्रयास कर रहा है कि 'std :: nextafter' कैसे लागू किया गया है और हो सकता है कि हम कुछ समकक्ष के साथ आ सकें। – Abhijit
मेरा साइथन आधारित समाधान विंडोज़ पर काम करना चाहिए (देखा कि आप अपनी प्रोफ़ाइल में एक विंडोज़ लड़के हैं)। आप पाइप से साइथन स्थापित कर सकते हैं। जीसीसी/जी ++ की आवश्यकता है। आपको setup.py में लाइब्रेरी, library_dirs और include_dirs पथ सेट करना पड़ सकता है, वे मानक फ़ाइल पथ हैं जिन्हें आप अपने कंपाइलर को cmath का उपयोग करने वाले कुछ बनाने के लिए पास करेंगे। सुनिश्चित नहीं है कि वे पथ विंडोज़ पर क्या दिखेंगे या भले ही उन्हें आवश्यकता होगी (शायद नहीं), लेकिन कोई कारण नहीं है कि यह काम नहीं करना चाहिए। – Endophage
नहीं, यह नहीं है। नकली का सबसे आसान तरीका यह है कि संरचना मॉड्यूल का उपयोग 8-बाइट int में परिवर्तित करने के लिए, int में एक जोड़ें, और वापस कनवर्ट करें। यह सकारात्मक संख्याओं के लिए ठीक काम करता है, और नकारात्मक संख्याओं के लिए कुछ tweaking की जरूरत है। –