Як мені ввести в python літерал з нескінченністю з плаваючою комою


76

Як ввести в python літерал нескінченності з плаваючою комою?

я чув

 inf = float('inf')

є не портативним. Таким чином, я рекомендував наступне:

 inf = 1e400

Це стандартний чи портативний? Що є найкращою практикою?

Відповіді:


63

У python 2.6 це портативно, якщо центральний процесор це підтримує

Тепер функція float () перетворить рядок nan на значення IEEE 754 Not A Number, а + inf та -inf на позитивну чи негативну нескінченність. Це працює на будь-якій платформі із семантикою IEEE 754.


15
@fmark: Удачі у пошуку платформи, на якій працює Python, але яка не має семантики IEEE 754. Теоретично, float('inf')слід піднімати ValueErrorна цих платформах, але, наскільки мені відомо, така поведінка ніколи не перевірялася, оскільки Python (ну, принаймні, останні версії Python) ще не відповідав такій платформі. На практиці не турбуйтеся про це.
Марк Дікінсон,

16

float('inf')є не портативним, як і не портативний назад до Python 2.5, коли вихідний рядок змінюється між платформами. Починаючи з 2.6 і далі float('inf')гарантовано працює на платформах, що відповідають стандартам IEEE-754 (посилання: http://www.python.org/dev/peps/pep-0754/ ).

(І рекомендація, здається, знаходиться в діапазоні 1e30000, а не лише 1e400.)


11

Можливо, ви могли б зробити щось подібне

try:
    inf = float('inf')
except:  # check for a particular exception here?
    inf = 1e30000

6
+1. float('inf')є, безумовно, кращим, загалом. Можливо навіть, що "inf = 1e30000" може почати підвищуватись, OverflowErrorа не створювати нескінченність у якійсь майбутній версії Python.
Марк Дікінсон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.