Programming Practice #1~Division by Zero
古典的な名著「零の発見」を読まれた方は多いと思いますが、ゼロが今回のテーマ。プログラミングを組んで実際に動かしてみると、ゼロ除算が原因で強制終了した経験はありませんか?これを回避するための手法を伝授しましょう。
ゼロ除算の場合と無い場合でケース分けするのが一般的でしょうが、俺は面倒な事が嫌いなので、一行で代行しています。
subroutine DivisionbyZero(Zero, Result, EPSMAC) !******************************************************************** implicit none double precision:: Zero, Result, EPSMAC !==================================================================== ! Zero = 0.0 Result = 1.0 / (Zero + dsign(Zero, EPSMAC)) !==================================================================== end subroutine
実に簡単でしょう!
因みに、上記プログラムのdsignとは符号を逆転させる関数です。IEEE 754 浮動小数点規格では-ゼロ(-0)も定義されている為、その要素をプログラミングに組み込んで置く必要があります。-ゼロの場合、符号を逆転させます。
現在使われている数字がアラビア数字と呼称されるのは、アラビア人によって広められたことに由来しますが、古来アラビア人は数字らしい数字は持ってなく、インド起源の記数法を使っていた。ゼロがインドで発見されたのは6世紀という説が有力であるが、10世紀にはこのインド記数法がヨーロッパに広まっていたものの1~9までしか使われず、ゼロが受け入れられたのは12世紀以後にずれ込む。因みに、日本にゼロが伝わったのはオランダ人によって17世紀頃伝えられた。
古代エジプト、ギリシアやローマではなく、何故インドでゼロが発見されたのか幼少ながら不思議に思っていたが、中学校の図書館で読んだ「零の発見」でもその理由ははっきりしなかった。ゼロは「位取り」には大変便利な役割を果たすのだが、ギリシア、若いてはヨーロッパでは「ゼロ」は「無限」と並んで哲学、宗教との闘いの核心であったのが大きな要因のようだ。この辺の動きは「異端の数ゼロ」に詳しい。機会があったらご紹介しましょう。
話は変わりますが、「0の0乗」はご存知ですか。
確か高校の数学で出てきましたが、教科書では定義されていなかったとおぼろげに記憶しています。1と定義することが一般的で、Fortranの計算でも1となりますが、Excelでは#NUM!とエラー表示が帰ってきます。
以上