質問

つまり、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で修正されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top