2021年09月15日

Python Overflowで四苦八苦して楽しくて苦しくて なんなんだよ

OverFlowの確認のために・・・どっかのサイトから拾ってきた簡単なコード

import math
try:
    a = math.exp(710)
    print(a)

except OverflowError:
    print( "Overflow Error")

結果は、 Overflow Error   と出た。

 

次に、同じコードのようだがちょっと違う

import numpy as np
try:
    a = np.exp(710)
    print(a)

except OverflowError:
    print( "Overflow Error")

これは Overflow Error  は出ず、Teminalに
RuntimeWarning: overflow encountered in exp
  a = np.exp(710)
inf

と出た。mathのexp()はOverFlowで例外投げるが、numpyのexp()はOverFlowで例外を投げず、かわりに inf を返すようだ。Overflowは生じているのに。

math, numpyでの違いってものがあるのだなあ。。。
これは math.exp() と np.exp() での違いであるが、では10の指数の場合にはどうなるのだ?  
  想像するに、numpyはinfを返すだが、mathは?  よーし、やってみそ
どっちも inf であったなりぃ。。。。

さて、そこで問題です。10の指数表現の場合に最大値を超えたかどうかを検出するにはどうしたらいいでしょうか? 
   そりゃ、ちみぃ・・・・結果が inf だったらOverflowしとるだよ、単純さーへへ、。、、、

そなの? 
後で調べようっと。。。。 inf って数字じゃないしなあ、文字列だしなあ。・・・たぶん。
こうなると面倒だが最大値は 1E308ぐらいなので、この指数の308を見張るかなあ。
賢人・先人・はどのように処理しておるであろうか、Googlingしようっと、明日。

import math
import numpy
の場合には、infは math.inf, np.inf なのである。数値として使う場合には inf だけではダメだったす。

0で割ったり、最大桁を超えたりという場合の解説があまりないが普通はそんなことしないからであろう。。。。テキトー いくつかあったので読んだけど。

ちなみに0で割るとエラー出してプログラム抜ける・・・と思っているが、numpyの配列に対しての0割は inf を出す・・・エラーで抜けることはないのだった、ドッヒーーー。

posted by toinohni at 12:43| 東京 🌁| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください