黒体輻射のプランク数式で絶対温度 T = 3K の宇宙背景放射の計算を1000THzまで計算しようとしてwxMaximaはコケた、Python Scipyもコケた。OverFlowだ。倍精度での最大値を超えたのだった。うむうむ。
doubleだと、wxMaximaでは exp(310)はOverFlowでエラー出して。
Python もエラーだし。
倍精度最大値は10^308ぐらいでありexp(309)相当になるので。
だが、g++ ではOverflowは出なかった。
cout << exp(710);
結果は inf と出た。
エラー出してプログラム終了ではないのだ。おや、そういうものだつたんですね。
ちなみに、 1/inf =====> 0って表示出しましたね、賢いですね。
g++ ------ 8.1.0
まあなんかやると、いろいろと知らない事が出てきますわ。それだな、だからこそ、暇つぶしになる!!
浅学非才!! 不勉強が身に染みる。出来の悪い学生の成れの果て!! (笑)
稲、草、weed,
しかし、Google先生は賢いもので、なんという迅速な回答を!!
cout <<expl(710);
こうすればよいのであった!! long doubleという型があるではないか、C++言語には。
これで1000THzまで計算できる!! スバラシイ、わーいえむ・・・・・・・
cout <<expl(7100); これならOverflowだろ・・・と思ったら、
3.09615e+3083 と出た。
long doubleの場合は扱える数値範囲はどこまでだ?
IEEE-754 には128bitの規格があるが、ほんまに杓子定規にこれを実現しているわけではあるまい。CPU(FPU構造では80bitがHardwareとしてあるので、これだろ。
だが、long doubleで扱える範囲がちょ~拡大したのは分かる。
しゃーないから、1000THzまでC++で計算してグラフはGnuplot使えば良いのである。
やっぱC++かーーーー(´・ω・`)