2021年09月15日

Overflowって生ずるんですよ なあぁにぃぃみつけちまったな

VScode + Python, c/c++ でもそうだが。doubleの最大値は 10^308 ぐらい、これはe^709ぐらいになる。こんな数字を超える事はあるま~~に。特にワタクシのような趣味のプログラムでは・・・と思っていたらOverflowが生じたのである。

プランクの黒体輻射の数式を計算してグラフ化する。数式書いてmatplotlibでグラフ出すだけ。

image

数式 書くの面倒だし、このブログではきれいな数式が出ないので略だが、
exp(h*f/k*T)  という項目が計算式にある。
h*f/k*T が709を超える場合があるのだった。周波数f は極めて高く、温度Tはかなり低い場合に。
プランク定数    h = 6.626E-34
ボルツマン定数 k = 1.381E-23

教科書の黒体輻射の説明では T = 500~ 5000Kぐらいだった気がする。それは溶鉱炉の話である。周波数はE16ぐらいまでか。その場合にはOverflowは生じなかった。

ところが、宇宙背景放射の場合には黒体輻射なのだが T = 3Kぐらいなのである。Overflow生じたのである、(周波数が低い領域では生じない)
では、どするか?  doubleは倍精度である。倍の倍精度とか使うのか。あるのか。あるらしいな。Pythonで使えるのか。知らんもんね。
世の中には4倍精度という規格があるようなのでPythonで使えるか、だが。
c/c++ではどうか、なのだが。
ちょっくら調べて上の計算だけやってみるか、そのうち。

数式を単純に計算したらdoubleで表せる数の最大を超えました・・・という時はどのようにすればよろしいんで?  単位を変更して数字がでかくならないようにするとか?
天文計算の例では時間を秒ではなくて年にしていたなあ。距離はメートルではなくて天文単位とか。光年とか、pcとか。テキトー。
計算式に物理定数を代入して単純に計算するというのは芸がなさすぎるかも知れぬ・・・いや、それでいいのだワタクシのレベルでは。
なにかやってみる。すると弊害、副作用、副反応等が出る。そこにこそ学習のヒントがあるってものなのであーーーる。どーよ。なにがよ。知らんわ。

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