みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

小数の足し算

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となるのはなぜですか?

投稿日時 - 2008-07-07 02:49:53

QNo.4157166

暇なときに回答ください

質問者が選んだベストアンサー

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

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


参考[浮動小数点]↓
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0

投稿日時 - 2008-07-07 04:51:13

お礼

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

投稿日時 - 2008-09-04 22:36:15

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問