数値計算

記事数:(3)

ソフトウェア

打ち切り誤差:精度と計算コストのせめぎ合い

計算機は、一見するとどんな計算でも間違えずにこなす魔法の箱のように思えます。しかし、現実には計算機にも限界があるのです。魔法ではなく、電気仕掛けで動いている以上、使える資源には限りがあります。特に、数字を扱う際には、その限界が顕著に現れます。 例えば、円を描く時に使う円周率や、自然対数の底といった数学でよく使う数字は、無限に続く小数です。これを紙に書くときも、計算機で扱うときも、全てを書き表すことはできません。そこで、ある程度のところで切り捨てて、近似した値を使います。 計算機の中では、数字は0と1の組み合わせで表現されます。この組み合わせの数も有限なので、近似値を使う必要があるのです。この近似によって生じるわずかな誤差は、たいていの場合は問題になりません。しかし、複雑な計算を何度も繰り返すと、小さな誤差が積み重なって、最終的な結果に大きな影響を与えることがあります。 例えば、宇宙ロケットの軌道計算や、天気予報、経済予測など、高度な計算を必要とする分野では、この誤差の影響を無視することはできません。計算機の限界を理解し、誤差をなるべく小さくする方法や、誤差の影響を予測する方法を考え出すことは、計算機を使う上で非常に大切なことなのです。まるで、料理で使う調味料の分量を調整するように、計算でも誤差を調整する工夫が求められます。そうすることで、より正確で信頼できる結果を得ることができるのです。
開発

非数の正体:計算機における未定義値

計算機の世界では、数字ではない特別な値が存在します。これを非数と呼びます。非数は「数字ではない」を意味する「Not a Number」の略語である「NaN」と書かれることもあります。 非数は、どんな数字と計算しても、結果は必ず非数になります。まるで、どんな色を混ぜても黒に染まってしまう絵の具のようです。 では、非数はどのような時に現れるのでしょうか?例えば、ゼロで割る計算を考えてみましょう。小学校で、ゼロで割る計算はできないと習ったことを覚えている人もいるかもしれません。このような、数学的に答えがない計算を行うと、非数という結果が返ってきます。 負の数の平方根を求める計算も同様です。例えば、-1の平方根は、二乗すると-1になる数ですが、そのような実数は存在しません。このような場合にも、計算結果は非数となります。 また、数字ではない文字や記号などを数字に変換しようとした場合にも非数が現れます。例えば、「あいうえお」という文字列を数字に変換しようとしても、それは数字ではないため、非数という結果が返されます。 非数は、計算処理において、予期せぬ誤りや例外を防ぐために重要な役割を担っています。もし非数がなかったら、ゼロで割るような計算をした際に、計算機が停止してしまうかもしれません。非数は、そのような問題を回避し、計算処理をスムーズに進めるための、いわば安全装置のような役割を果たしているのです。
開発

丸め誤差:コンピュータの落とし穴

計算機は、数を扱う際に、私たちが普段使っている十進数ではなく、二進数という、0と1だけの組み合わせで数を表す方法を使っています。そのため、十進数では簡単に表せる数でも、二進数ではうまく表せない場合があります。例えば、十進数の0.1は、二進数では永遠に続く数になり、完全に表すことができません。 計算機は限られた桁数しか扱えないため、この終わらない数を途中で切り捨てて処理します。この切り捨てによって生じる誤差を、丸め誤差といいます。丸め誤差は、一見すると小さな誤差ですが、計算を何度も繰り返すと、この小さな誤差が積み重なって、最終的な結果に大きな違いを生み出すことがあります。 例えば、0.1を10回足すと、本来は1になるはずです。しかし、計算機で計算すると、丸め誤差の影響で、1よりも少し大きい値や小さい値になることがあります。 この丸め誤差は、計算機を使う以上、避けることができません。特に、科学技術の計算やお金のやり取りなど、正確さが求められる場面では、この丸め誤差が大きな問題を引き起こす可能性があります。 そのため、計算機を使う際には、丸め誤差が発生することを常に意識し、誤差の影響を小さくするための工夫をする必要があります。例えば、計算の順番を変える、特別な計算方法を使うなど、様々な方法があります。これらの工夫によって、丸め誤差による問題を最小限に抑えることが重要です。