के साथ पाइथन राउंडिंग त्रुटि मुझे नहीं पता कि यह एक स्पष्ट बग है, लेकिन सिमुलेशन के पैरामीटर को बदलने के लिए पाइथन स्क्रिप्ट चलाने के दौरान, मुझे एहसास हुआ कि डेल्टा = 0.2 9 और डेल्टा = 0.58 के साथ परिणाम गायब थे। जांच पर, मैंने देखा है कि निम्नलिखित पायथन कोड:फ्लोट नंबर
for i_delta in range(0, 101, 1):
delta = float(i_delta)/100
(...)
filename = 'foo' + str(int(delta * 100)) + '.dat'
डेल्टा = 0.28 और 0.29, एक ही .57 के साथ और .58, कारण के लिए समान फ़ाइलों उत्पन्न किया जा रहा है कि अजगर रिटर्न (29)/100 .28999999999999998 के रूप में तैरने लगते हैं । लेकिन यह एक व्यवस्थित त्रुटि नहीं है, इस अर्थ में यह हर पूर्णांक के साथ नहीं होता है। तो मैं निम्नलिखित पायथन स्क्रिप्ट बनाया:
import sys
n = int(sys.argv[1])
for i in range(0, n + 1):
a = int(100 * (float(i)/100))
if i != a: print i, a
और मैं संख्या जिसके लिए इस गोलाई त्रुटि होता है में किसी भी पैटर्न नहीं देख सकता। यह उन विशेष संख्याओं के साथ क्यों होता है?
यह ठीक है कि आईईईई 754 फ्लोटिंग-पॉइंट नंबर कैसे काम करते हैं। मैं सुझाव देता हूं कि आप आसानी से छंटनी के बजाए फ्लोट को एक पूर्णांक में बदलने के लिए गोल करें। –
यह कोई त्रुटि नहीं है - यह कई अलग-अलग भाषाओं में आम है। कुछ walkarounds हैं, लेकिन इस मामले में सबसे सरल समाधान सिर्फ फ़ाइल नाम में idelta का उपयोग कर सकता है। बस ध्यान रखें कि idelta डिफ़ॉल्ट रूप से लूप के बाहर पारित नहीं किया गया है। – Tadeck
# StdSOAnswer_1। इस तरह फ्लोटिंग पॉइंट काम करता है। –