2011年10月14日

丸め誤差

プログラムしてると、よく配列にNANとかInfとかが入っている。
大抵は0割りによるもので、変数の名前を間違えたりすると簡単に発生する。

NANがあったら割り算の分母をとりあえず書き出すのが上等手段。

しかし今回は分母も全部チェックして、どれも問題なし
さあ困った

しかしよく見ると、もう1つ危険な関数が存在していた
Arccos(X)

Xが1以上になるとNANが発生するらしい
とはいえ、なんど見直してもXは1以下に収まっている

そう、1「以下」に

1以下は1を含むのです。
浮動小数点の型では整数を表現できず、まれにメモリの気まぐれ(丸め誤差)で
1.000000000000000001 になったりする

数式的には正しくてもエラーが起きる典型

if X > 1.D0 then X=1.D0 とかやりたいところではあるが、
新たに代入した1.D0も 1.000000000000000000001 ではない保証がない

結局、非常に頭の悪い方法で回避
Arccos(0.9999*X)

なんとなく、コンピューターの限界を見た気がする
ラベル:program
posted by random-laplace at 11:09| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2011年10月13日

Ubuntu11.10とUnity

Ubuntu11.10が今日リリースとのことだが、少し前からベータ版を使っている。
11.04の時点では正直かなり使いにくかったのだが、少しだけよくなっていた。

それでもまだGNOMEの方がいいと感じるが、改良が早いのは喜ばしい。

とりあえず、まだまだよくなる余地があるということで、
無理にGNOMEに戻さずに気長に使うのが吉。

そのうち化けることに期待。
ラベル:ubuntu Linux
posted by random-laplace at 10:25| Comment(0) | TrackBack(0) | Linux | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。