■演算誤差とは
0.1を10回足したら、いくつになるでしょうか? 答えは1です。しかし、この計算をコンピューターで計算を行うと1にならずに0.999999になってしまいます。つまり計算による誤差が発生してしまうのです。コンピューターで行われる小数値の計算は演算誤差が発生します。これは内部では10進数でなく2進数に変換されて計算されるためです。内部が10進数、BCD演算が行われている場合には、このような演算誤差は非常に少なくなります。詳しくは演算誤差というキーワードで検索して調べてみてください。■ブラウザでの結果
ここでは各ブラウザでの演算誤差の結果を示します。0.1を10回計算した結果と0.1と0.4-0.3の計算結果を比較したもので行っています。ブラウザ名の部分をクリックすると実際の実行画面をキャプチャーした画像が表示されます。OS | ブラウザ | 0.1を10回計算した結果 | 0.1と0.4-0.3の比較結果 |
Windows 98 | Internet Explorer 4.0 | × | × |
Windows 2000 | Internet Explorer 5.0 | × | × |
Windows Me | Internet Explorer 5.5 | × | × |
Windows XP Home | Internet Explorer 6.0 | × | × |
Windows XP Home | Netscape 6.2 | × | × |
Windows XP Home | Netscape 7.1 | × | × |
Windows XP Home | Firefox 1.0beta | × | × |
Windows XP Home | Opera 6.06 | × | × |
Windows XP Home | Opera 7.23 | × | × |
Windows XP Professional (SP2) | Internet Explorer 6.0 | × | × |
Macintosh (MacOS X 10.3) | Internet Explorer 5.2.3 | × | × |
Macintosh (MacOS X 10.3) | Netscape 7.1 | × | × |
Macintosh (MacOS X 10.3) | Mozilla 1.7.2 | × | × |
Macintosh (MacOS X 10.3) | Firefox 0.8 | × | × |
Macintosh (MacOS X 10.3) | Opera 6.03 | × | × |
Macintosh (MacOS X 10.3) | Opera 7.5 | × | × |
Macintosh (MacOS X 10.3) | iCab 2.9.8 | ○ | × |
スクリプトは以下のようになっています。こちらのページで実行できます。
<html> <head> <title>演算誤差テスト</title> </head> <body> <h1>演算誤差テスト</h1> <br> ■0.1を10回加算<br> <script language="JavaScript"><!-- for (i=0,n=0; i<10; n+=0.1,i++); document.write(n); // --></script> <br> <hr> <br> ■0.1と0.4-0.3の結果の比較<br> <script language="JavaScript"><!-- a = 0.1; b = 0.4-0.3; if (a == b) document.write("0.1と0.4-0.3は同じ"); if (a < b) document.write("0.1は0.4-0.3より小さい"); if (a > b) document.write("0.1は0.4-0.3より大きい"); // --></script> <br> <hr> <br> </body> </html>