184 votes

Python Infinity - les mises en garde ?

Python a donc infini positif et négatif :

Cela semble juste comme le type d’entité qui doit avoir une mise en garde. Est-ce là tout ce que je devrais être au courant des ?

105voto

Abel Points 24335

Python est mise en œuvre suit la norme IEEE-754 assez bien, que vous pouvez utiliser comme un guide. Récemment, un correctif a été appliqué qui permet à "l'infini" et "inf", mais c'est de peu d'importance ici.

Comparaison de l'inégalité

Lorsque vous traitez avec l'infini et plus-que > ou moins de < opérateurs, le compte suivant:

  • n'importe quel nombre est plus élevé que -inf et
  • tout nombre est inférieur +inf

Comparaison pour l'égalité

Comparativement à l'égalité, +inf et +inf sont égaux, comme le sont -inf et -inf. C'est beaucoup débattu de la question et peut sembler évident, mais il est dans la norme IEEE et Python se comporte juste comme ça.

Les calculs avec l'infini

Tout calcul avec l'infini les rendements de l'infini, sauf lorsque le résultat serait indéfini (comme avec multiplié par zéro, voir un autre exemple dans ce fil), ce qui donne NaN, et en divisant un nombre quelconque (à l'exception de l'infini lui-même) à l'infini, ce qui donne 0.0.

98voto

Greg Hewgill Points 356191

Vous pouvez toujours obtenir pas un nombre (NaN) les valeurs de la simple arithmétique impliquant inf:

>>> 0 * float("inf")
nan

Notez que vous ne sera normalement pas obtenir un inf de la valeur grâce à l'habitude des calculs arithmétiques:

>>> 2.0**2
4.0
>>> _**2
16.0
>>> _**2
256.0
>>> _**2
65536.0
>>> _**2
4294967296.0
>>> _**2
1.8446744073709552e+19
>>> _**2
3.4028236692093846e+38
>>> _**2
1.157920892373162e+77
>>> _**2
1.3407807929942597e+154
>>> _**2
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
OverflowError: (34, 'Numerical result out of range')

L' inf de la valeur est considérée comme une valeur spéciale avec une rare sémantique, il est donc préférable de connaître un OverflowError tout de suite par une exception, plutôt que d'avoir un inf de la valeur silencieusement injecté dans vos calculs.

3voto

ephemient Points 87003

Donc ne C99.

La norme IEEE 754 représentation à virgule flottante utilisée par tous les processeurs modernes a plusieurs modèles de bits réservés à l'infini positif (signe=0, exp=~0, frac=0), l'infini négatif (le signe=1, exp=~0, frac=0), et de nombreux NaN (Pas un Nombre: exp=~0, frac≠0).

Tout ce que vous devez craindre: arithmétique peut causer des exceptions de virgule flottante/pièges, mais ceux-là ne sont pas limités à ces "intéressant" constantes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X