割り算の筆算JavaScript

JavaScriptで割り算って難しいのです


割り算の筆算JavaScriptへ

割り算の筆算の答えあわせが簡単に出来るツールを作ってみようと、鼻歌交じりに始めたプログラミングでした。理論上OKなアルゴリズムが、小数の割り算のテストを始めた途端、万能じゃない…時々変な結果が出る…という状況に。

例えば、小数点以下3桁までの計算結果を出す場合、
{(割られる数×1000)÷割る数}を小数点以下切り捨てて整数化÷1000…(A)
で計算できる筈なんです。

でも、3.01になる筈の計算が、3.009になったりする。涙目でチェックしてみた所、テキストボックスに小数を入力したものを読み込む時点で既に誤差が生じる場合がありました。また、読み込みの時に誤差が無いとしても割り算でも微小な誤差が生じる場合が有りました。
WindowsのインターネットエクスプローラのJavaScriptの方が、Linaxザウルスのブラウザ(NetFront V3.0)のJavaScriptよりも誤差が出にくいのですが、必ず出ない訳では無い。

ちなみにNetFrontでどの程度誤差が出るかチェックしてみた所、
0.1×10-1=00.2×10-2=0
0.3×10-3=4.440892098500626e-160.4×10-4=0
0.5×10-5=00.6×10-6=8.881784197001252e-16
0.7×10-7=8.881784197001252e-160.8×10-8=0
0.9×10-9=0
という訳で、どきどき、10のマイナス16乗程度のところで誤差が出ています。(WindowsのIEでは全て0になりました。)

ここの例では、全て大きい方への誤差なので上記の(A)の式などで切り捨てた時に正常な計算に戻る可能性もありますが、小さい方への誤差が生じた場合、3.01が3.00999999999などになって、切り捨てたときに3.01が3.009になってしまうことになる訳です。

 という訳で、本JavaScriptでは小数を入力する場合は数値ではなく文字列として読み込み、整数値と小数点の位置として取り込み、商を求める際も、小数が生じる割り算は避けて、掛け算と引き算の組み合わせを使って実現しています。本当に紙上で計算する時と同様に、一桁ずつ下ろしてきて一桁ずつ計算しています。
かなりチェックを繰り返しておりますが、未だ何か変なところが有りましたら無記名でも良いですので、どうぞ、ご連絡ください。

2007.09.15

[HOME][とまて週報TOP]