見出し画像

0.1+0.2=0.3じゃない

プログラムあるある。
$${sin(0)=0}$$だけど$${sin(\pi)\ne0}$$って話が前回で、理由があって特に$${sin(\pi)=0}$$として扱いたい時に困るってことです。

そもそもコンピュータって丸め誤差あるから小数点計算すると$${0.1+0.2=0.3000}$$とかになるけど$${0.1+0.2==0.3000 \to FALSE}$$です。

結論言えば
・整数として扱ったほうが良い
・判別式使うのが好ましくない
こんな感じです。

MATLABで実行

私が学生の頃はPCがMS-DOSからwindows3.1/95へ、科学技術計算用の言語がFORTRANの末期で人によってはC言語って時でした。

つまりメモリが8~32MB、HDDが500MB程度で科技計算は大型コンピュータに頼らざるを得なかった。(その大型も今となっては普通のPC以下?)

プログラムもなるべく整数で扱ったり、FORTRANはそもそも単精度、倍精度などの型式の指定が細かく、指定した通りの型式にしないと返ってくる答えがデタラメ(明らかに間違っているとむしろ気づきやすい。)であるということで、小数点の扱いには気を使っていました。

今はハードウェア的には恵まれているので単精度、倍精度など気にせず複雑な式でも簡略化せずに力技で解けてしまう。
こうして記述して基本的なこと思い出しました。

ちなみに新人さんに計算プログラムを書かせて、エラーは出ないものの所望の解が得られない時わりとこんな単純なところで躓いてます。

って、私も未だにうっかりやってしまいますが・・・

この記事が気に入ったらサポートをしてみませんか?