إنفينيتي إنشاء في التعليمات البرمجية الثعبان
سؤال
وأنا أبحث على بعض معقد كود بايثون 2.6 والذي أدى في بعض الأحيان في اللانهاية التي يتم توليدها (على الأقل إنفينيتي يجري تسلسل من قبل مكتبة سلمان - الذي يتحقق ث / math.isinf).
ما هو المحير وخصوصا أن بايثون (بقدر ما استطيع ان اقول) لا ينبغي أن تكون قادرة على إنتاج أي وقت مضى نتائج حساب مجموعة إلى ما لا نهاية. أنا على خطأ مع هذا الافتراض؟ كنت على علم يمكنك فقط الحصول على اللامتناهي من الثوابت:
k = float('inf')
k = 1e900
المحلول
وفي مكان ما بين 1e308 1e309 وتشغيل العوامات من الدقة، لذلك إذا كنت الحوسبة النتائج فوق هذا النطاق سترى الوقود النووي المشع
>>> 1e308
1e+308
>>> 1e309
inf
>>> json.dumps(1e308,allow_nan=False)
'1e+308'
>>> json.dumps(1e309,allow_nan=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/json/__init__.py", line 237, in dumps
**kw).encode(obj)
File "/usr/lib/python2.6/json/encoder.py", line 367, in encode
chunks = list(self.iterencode(o))
File "/usr/lib/python2.6/json/encoder.py", line 304, in _iterencode
yield floatstr(o, self.allow_nan)
File "/usr/lib/python2.6/json/encoder.py", line 47, in floatstr
raise ValueError(msg)
ValueError: Out of range float values are not JSON compliant: inf
>>>
وعشري يمكن التعامل مع أعداد أكبر، ولكن من الواضح أن هناك جزاء أداء (وأنه لا يمكن إجراء تسلسل مع سلمان)
>>> from decimal import Decimal
>>> Decimal('1e900')/10
Decimal("1E+899")
وهنا مثال على إضافة أن لا تثير استثناء المفيض
>>> a=1e308
>>> a+a
inf
لا تنتمي إلى StackOverflow