墜落日記 - 2009年3月14日の墜落
PHP で任意精度の演算を - 完結編
PHP で任意精度の計算を行うクラスの開発を行っていた自分だが、なんか実装が冗長的であることに気づいた。
と言うか、GMP 値で整数部分と少数部分を別個管理する必要性など全くなく、1 つの GMP 値の下位の桁が小数点以下だと考えれば良かっただけなのである。
つまり、任意精度整数値である GMP 値で、"1234567890123456789" という整数値を管理して、精度を 4 とか保持しておけば、下位の 4 桁は小数点以下であると認識することが出来るので、"123456789012345.6789" という任意精度の固定小数点数として処理できる。
それだけである。
こうすると四則演算もそう難しくない単純な実装で行うことが出来る。
精度が違う除算はやや厄介だが、それだけである。
なんか、当然と言えば当然だが、連続した徹夜紛いの戦いをしていると、そんな単純な事にすら思い至らないらしい。
で、結局出来たクラスは JAVA で言うところの BigInteger と BigDecimal に相当する。
精度の考え方も JAVA から輸入。
こうすることで JAVA プログラマも抵抗なく利用できるはずだが、ぶっちゃけ物理計算的な有効桁数を導入するのが面倒だっただけである(爆)
んで、データベース抽象化ライブラリとの連携も実装し、Oracle や PostgreSQL との任意精度数値のやりとりが可能になった。
(他のデータベースとのドライバはまだ書いてない、ぶっちゃけ必要な物から書いた)
さて、マニュアルは全然書けてないけど、そろそろ実戦で利用する事になるので先行して公開してしまわないといけないな………
コメントは投稿されていません。