إنفينيتي إنشاء في التعليمات البرمجية الثعبان

StackOverflow https://stackoverflow.com/questions/1824751

  •  22-07-2019
  •  | 
  •  

سؤال

وأنا أبحث على بعض معقد كود بايثون 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top