電子書籍の厳選無料作品が豊富!

Javascriptで

<SCRIPT language="JavaScript"><!--
function wa()
{
a = eval( document.myFORM.a.value );
b = eval( document.myFORM.b.value );
s = a + b;
document.myFORM.kotae.value="答え " + s;
}
//--></SCRIPT>
</HEAD>
<BODY>
<FORM name="myFORM">
A =<INPUT type="text" name="a" size="3">B =<INPUT type="text" name="b" size="3"><BR>
<INPUT type="text" name="kotae"><INPUT type="button" value="=" onclick="wa()">
</FORM>
</BODY>

としたとき
A=0.1 B=0.05とすると
答え 0.15000000000000002となるのはなぜですか?

A 回答 (1件)

Javascriptが内部処理に[浮動小数点]方式をを使っているからです。


[浮動小数点]は、近似値を答として出力するという特徴があります。
誤差が出るので、計算を繰り返すと、誤差は大きくなっていきます。
Javascriptが内部で、答えが 0.51 等と表示される場合でも、
内部処理を[浮動小数点]で行い「丸み」をつけている
(小数点の表現を四捨五入のようにする)だけの場合が多いです。
誤差がなくなるわけではないので、
正確性を要する計算では、[固定小数点]をつかいます。
もっとも、自分で処理方法を考えなくてはならないので大変です。

2進数で小数を表現する場合[固定小数点](通常の小数)を使うと、
オーバーフローを起こしやすい(桁の小さい表現しかできない)
という、決定的な欠点があります。
そのため、天文学の物理演算などの計算ができません。
なら、正確性よりも桁の多い計算ができたほうが…
という理由で、
高等言語やスクリプトのほとんどが[固定小数点]をつかいます。
[浮動小数点]では、
テクニックによって誤差を少なくできる方法がいくつかありますので、
頑張ってみにつけてください。


参考[浮動小数点]↓
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
    • good
    • 0
この回答へのお礼

返事遅れました。すいません
少し難しいですがなんとなくわかりました
ありがとうございます

お礼日時:2008/09/04 22:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!