倍精度実数

近年はビジネスソフトウェアを対象にした案件ばかりだったので、扱うプリミティブな型はほとんど文字列と整数であり、実数/倍精度実数をみることは少なかった。それがこの前、久々に倍精度実数を本格的に用いるシステムに触れることになり、ちょっと新鮮な感覚を味わった。

20数年前に新卒で就職した頃は、宇宙ドメインのソフトウェアに関わっていたので、ほとんどが倍精度実数を用いた演算であった。x==0.0といった同値判定が行えない世界だ。常にトレランス(tolerance)という微小正数を設定し、2つの値の差の絶対値がその値より小さければ、2つの値は等しいと判定しなければならない。Fortran-77の時代だ。

宇宙ドメインの業務から機械翻訳プログラムの開発に移ったとき、そこで扱うものは文字列と整数ばかりで、ただ単純に、あるアドレスにある値を別なアドレスにコピーするだけの繰り返しに過ぎないことに違和感さえ覚えたことを思い出す。x==yとためらいなく記述できるのだから。

倍精度実数を扱うといっても、"=="などのオペレータをトレランスを用いた同値判定処理で定義してカプセル化すれば済むだけなのかもしれないが、何か勿体ない感じがする。同じようなことは、ビット操作(ビットのシフトやローテーション、ビットの論理演算/マスク)や、XORを使ったスワップ、文字列や配列のrealloc、循環リストなどの小技にもある。こんな小技を楽しむようなことは、最近はもう許されないのだろうか。