2020年04月23日

倍精度とか多倍長とかで四苦八苦して楽Cーー なあぁにいぃ・・・見つけちまったな!

wxMaximaでプランクの黒体放射の数式の計算していてOverFlowが起きた。絶対温度 T = 3Kの場合には振動数を光の領域以上にするとoverflowする。
exp(hν/kT) でコケた。exp(709)あたりが倍精度の最大であり、これは10^308ぐらいに相当するのであった。

ではどうするか。T = 3K というのはエネルギーが低いので振動数の高い光子はない、として振動数をGHzぐらいで止めるとOverFlowは発生しない。じゃいいじゃん(笑)何も1000THzまで計算することはないのだよ、ちみぃ。。・。。。

だが、何か悔しいのである。そこで倍精度の倍とかの仕組みは?  とか検索ですね。
Maximaは多倍長を扱う事もできるので。。。
で、実はこういうことになるようなので朕の期待には沿わないようだ。
https://na-inet.jp/research/mp2014.pdf
image

そこの定義。精度を上げるには仮数部の桁数を増やすのだ!!  だって、定義だもん。

つまり、数値範囲の拡大ではない。なので多倍長にしても10^308ぐらいが上限になる。
まあ、これはwxMaximaで多倍長試して overflowは出たからね。

するとwxMaximaでは無理。振動数を1000THZまで設定したらoverflowするだす。

Python Scipyで同じ数式を計算しても同じようにoverflowしたのでPythonfはデフォで倍精度なのだな。つーか、それが普通らしい。Cでは float, doubleと型が用意されているが、doubleを使えばいいのよと誰かが言う取った。float型は桁が少ないから高速である・・・ということはあり得ない。CPU構造で決まるとか。

うむうむ。

で、4倍精度とか、gccでは疑似4倍精度とか拡張64bitで80bitの仕様があるとかないとか、検索して引っかかったものの、ワテはまだ理解しとらんのである。
まー、gcc(g++)で計算してみっかね、例題探して・・・という気分。

とは言え、予は倍精度の計算でOverFlowが生じた!!  という現象に感動しておーーーる。数値計算のエラーでは分母ゼロにして あららら、というのは何度もあるけどなあ。

浅学非才!! 不勉強が身に染みる春 (´・ω・`)

おれ、少しマジメにBlog書こうかなと思い始める今日このごろ。

街中で昼間に若い夫婦と小学校低学年ぐらいの子供連れを見かけるようになった。在宅ワークで家にいるんだろなあ、夫婦共に。
新コロでコロコロ・・・・
昔、トヨタにコロナという車種があったなあ。。。。。。
技術系の出版社で コロナ社 というのもあるなあ。何冊か持っとるし。

外出自粛・・・・・ そんなこたーオレは10年前からやっとるわい!! 
世の中が やっと オレに追いついてきたぞ(笑)

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