質問
つまり、Pythonには正と負の無限大があります:
float("inf"), float("-inf")
これは、注意が必要な機能のタイプのようです。知っておくべきことはありますか?
解決
inf
を含む単純な算術演算から非数(NaN)値を取得できます:
>>> 0 * float("inf")
nan
通常の算術計算では、通常、 inf
の値を取得しないことに注意してください:
>>> 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')
inf
の値は、異常なセマンティクスを持つ非常に特別な値と見なされます。したがって、 > inf
の値が計算にサイレントに挿入されます。
他のヒント
Pythonの実装は、 IEEE-754標準はガイダンスとして使用できますが、コンパイルされた基礎となるシステムに依存しているため、< a href = "http://www.python.org/dev/peps/pep-0754/" rel = "noreferrer">プラットフォームの違いが発生する可能性があります。最近&#185 ;、 &quot; infinity&quot;を許可する修正が適用されました。 &quot; inf&quot; と同様ですが、ここではあまり重要ではありません。
以下のセクションは、IEEE浮動小数点演算を正しく実装するすべての言語に等しく適用されます。これはPythonだけに固有のものではありません。
不平等の比較
無限大および&gt;
または&lt;
未満の演算子を扱う場合、以下が考慮されます:
-
+ inf
を含む任意の数値が-inf
よりも大きい
-
-inf
を含む任意の数値が+ inf
よりも小さい -
+ inf
は高さも低さもありません+ inf
より
-
-inf
は-inf
よりも高くも低くもない
-
NaN
を含む比較はすべて偽です(inf
はNaN
よりも高くも低くもありません)
平等の比較
等しいかどうかを比較すると、 + inf
と + inf
は等しく、 -inf
と -inf
。これは議論の多い問題であり、議論の余地があるかもしれませんが、IEEE規格にあり、Pythonはそのように動作します。
もちろん、 + inf
は -inf
とは異なり、 NaN
自体を含むすべては NaN
。
無限大の計算
両方のオペランドが無限大でない限り、無限大でのほとんどの計算は無限大になります。演算の除算またはモジュロ、またはゼロとの乗算では、留意すべきいくつかの特別な規則があります。
- 結果が未定義であるゼロを乗算すると、
NaN
が生成されます
- 任意の数(無限大自体を除く)を無限大で除算すると、
0.0
または-0.0
&#178;。 - 正または負の無限大で(モジュロを含む)正または負の無限大を除算すると、結果は未定義になるため、
NaN
。 - 減算すると、結果は驚くかもしれませんが、に従ってください数学の常識:
-
inf-inf
を実行すると、結果は未定義になります:NaN
; -
inf--inf
を実行すると、結果はinf
; -
-inf-inf
を実行すると、結果は-inf
; -
-inf--inf
を実行すると、結果は未定義になります:NaN
。
-
- 追加するとき、同様に驚くかもしれません:
-
inf + inf
を実行すると、結果はinf
; -
inf + -inf
を実行すると、結果は未定義になります:NaN
; -
-inf + inf
を実行した場合、結果は未定義です:NaN
; -
-inf + -inf
を実行すると、結果は-inf
になります。
-
-
math.pow
、pow
、または**
を使用するのは、本来どおりに動作しないため、注意が必要です。 2つの実数の結果が高すぎて倍精度の浮動小数点数に収まらない場合(無限大を返す必要があります)、ただし入力が
C99 も同様です。
すべての最新のプロセッサで使用されるIEEE 754浮動小数点表現には、正の無限大(sign = 0、exp =〜0、frac = 0)、負の無限大(sign = 1、exp =〜0、 frac = 0)、および多くのNaN(非数:exp =〜0、frac&#8800; 0)。
心配する必要があるのは、一部の算術演算が浮動小数点の例外/トラップを引き起こす可能性があることですが、これらはこれらの「興味深い」だけに限定されません。定数。
これまで誰も言及していない警告を見つけました。実際の状況で頻繁に発生するかどうかはわかりませんが、ここでは完全を期すためのものです。
通常、無限大を法とする数値を計算すると浮動小数点数として返されますが、無限大を法とする小数部は nan
(数値ではない)を返します。次に例を示します。
>>> from fractions import Fraction
>>> from math import inf
>>> 3 % inf
3.0
>>> 3.5 % inf
3.5
>>> Fraction('1/3') % inf
nan
Pythonバグトラッカーに問題を提出しました。 https://bugs.python.org/issue32968 で確認できます。
更新:これは Python 3.8で修正されます。