下記のようなページで
<HTML>
<HEAD>
<script language="JavaScript">
<!--
function calc() {
document.f.t3.value = eval(document.f.t1.value) * eval(document.f.t2.value);
return true;
}
//-->
</script>
</HEAD>

<BODY bgcolor="#FFFFFF">
<form name="f">
<input type="text" name="t1">
×
<input type="text" name="t2" onkeyup="calc()">

<input type="text" name="t3">
</form>
</BODY>
</HTML>
一番目のテキストフォームと2番目のテキストフォームに任意の数値を入力したら3番目のテキストフォームに掛け算された結果が表示されるというプログラムで、一番目に10.07と入力し、2番目に11を入力して掛け算をさせると110.77000000000001となってしまいます。
本当の結果は110.77なのですが。。。。
どなたか、原因、対処法をご存知の方、ご教授ください。
よろしくお願い致します。

A 回答 (5件)

> ちなみに、掛け算だけこのような問題がでるのでしょうか?


> 割り算などでは問題は起きないのでしょうか?

これは、実数が浮動小数点で表現されていることに起因する問題ですから、演算の
種類に限らず発生する問題です。

手元の NN4.7x で確認したのですが、例えば、以下のような計算が期待通りにいきません。

  1.01 + 1.1
  1.01 - 1.1
  12.3 / 0.3

> これは、ひどいですよね。Javascriptは。

先ほども書いた通り、浮動小数点を扱うものは全てこの問題を抱えています。

JavaScript がひどいとしたら、実数をフォーマットして出力してくれる仕組み
(C だったら printf() 関数とか)を標準で用意していないことです。

まあ、みんなが欲しくなるものは、誰かが作っていたりします。例えば、参考URLの
ページなんかが。

参考URL:http://aoki2.si.gunma-u.ac.jp/JavaScript/src/io. …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

printf関数を利用すればよいのですね。
printfは書式付の書き出しという意味ですか?
ただ、printf()関数をどういった形で利用すればよいのでしょうか?

すみません。プログラムの基本をわかってないものですから。

お礼日時:2002/03/19 23:11

こんにちは、xruzです。



誤差が生ずるのは2進数で演算しているためです。

回避方法(小数点以下が2桁の場合):

<HTML>
<HEAD>
<script language="JavaScript">
<!--
function calc() {
document.f.t3.value = ((parseFloat(document.f.t1.value) * 100.0) * parseFloat(document.f.t2.value)) / 100.0 ;
return true;
}
//-->
</script>
</HEAD>

<BODY bgcolor="#FFFFFF">
<form name="f">
<input type="text" name="t1">
×
<input type="text" name="t2" onkeyup="calc()">

<input type="text" name="t3">
</form>
</BODY>
</HTML>

がんばってくださいね(^:^i
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>document.f.t3.value = ((parseFloat(document.f.t1.value) * 100.0) * parseFloat(document.f.t2.value)) / 100.0 ;
parseFloatを使って、100をかけ、あとで100で割るという作業をするのですね。

お礼日時:2002/03/20 01:21

割り算でも誤差が生じる場合があるみたいです。


整数の足し算でも誤差が生じる場合があります。
桁数が多いとなるみたいです。
    • good
    • 0
この回答へのお礼

お返事有難うございます。
下記のa-kumaさんのようになるのですね。
実際に試してみましたら、
1.01-1.1=09000000000000008
となりました。
(私はWINのIE6です)

お礼日時:2002/03/19 22:42

alert(10.07*11)



110.77000000000001
になりました。

小数の場合、数字の最後の部分が 0001 と 9999 の
ような誤差が発生する場合がある。

小数の掛け算なら計算結果の小数の桁が予想できるから、
10.07*11 なら、小数は第2位までだと分かっているから
計算結果の数字から、コンマがあれば、コンマの右の
2つの数字までをコンマ無しで抜き出して、11077
小数第3位が9であれば1を足す。
最後にコンマを戻して 11077 にする。

10.07*0.145 なら、小数は第5位までだと分かっているから
計算結果の数字から、コンマがあれば、コンマの右の
5つの数字までをコンマ無しで抜き出して、146014
小数第6位が9であれば1を足す。
最後にコンマを戻して 1.46015 にする。

こんな感じでも出来そうです。
    • good
    • 0
この回答へのお礼

貴重なご意見有難うございます。

なるほど、999の場合と001のパターンで場合わけするのですね。

ちなみに、掛け算だけこのような問題がでるのでしょうか?
割り算などでは問題は起きないのでしょうか?

お礼日時:2002/03/17 23:17

こんばんわぁ、Blackwinglsです。



これは恐らく丸め処理のせいでしょう。
ブラウザではこの丸め処理の誤差部分まで表示してしまうようなので、11.1+111.1 が正しい計算結果が得られない、という話をどこかで聞いた覚えがあります。

結局、作成者側で何桁まで必要か考えて四捨五入するしかないようです。

<script language="JavaScript">
<!--
function calc() {
var a = eval(document.f.t1.value) * eval(document.f.t2.value)
var b = Math.round(a * 100) / 100
document.f.t3.value = b
return true;
}
//-->
</script>

というのではどうでしょうか?
2桁まで求めるようにしています。


ではでは(@^^)/~~~
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
たぶん、誤差の問題だろうとは思っていましたが。。
これは、ひどいですよね。Javascriptは。

2桁ですか。。
もっとほしいときもあるのですが、危険ですよね。

その都度考えるようにします。

お礼日時:2002/03/17 23:11

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q実験の誤差について

誤差は主に系統誤差と偶然誤差に分けられますが、最終結果においては
普通これらの誤差をどのように扱うのでしょうか?

系統誤差と偶然誤差をそれぞれ算出した後、
・値が大きい方の誤差を最終的な「誤差」とする
・二つの誤差を足し合わせて最終結果としての「誤差」とする
・いずれも実験値の最終的な「誤差」として議論する
 (特に二つを足したり引いたりするわけでもなく、「統計誤差」「偶然誤差」を
  どちらも最終的な「誤差」として取り扱っていく)
のどれが一般的に行われてることなのでしょうか。それとも、また別の扱い方が
されているのでしょうか。

回答よろしくお願いいたします。

Aベストアンサー

この Wikipedia の記事に貼ってある画像がわかりやすいでしょう。

正確度と精度 - Wikipedia
http://ja.wikipedia.org/wiki/%E6%AD%A3%E7%A2%BA%E5%BA%A6%E3%81%A8%E7%B2%BE%E5%BA%A6

つまり、そもそも的の中心から外れた方向に向いている、というのが「系統誤差」(正確度・確度)、

狙いは定まっているけれども、毎回同じところに飛んでいかない、というのが「偶然誤差」(精度)、

というわけです。

系統誤差の存在は、「そもそも基準はどこか?」というのがわかっていないと、絶対的数値が求まりません。ですから、測定値では、基準物の測定結果が無い限りは、どれだけが系統誤差でどれだけが偶然誤差なのか、という分離ができないのです。

Qdocument.writeをinput type="text"の value値に

超初心者です。
下記の式にてPHPよりjavascriptにてHTMLに書き出しできましたが
<script type="text/javascript" src="./jsphptest.php?long=3" ></script>この値をHTMLのinput type="text"の value値にデフォルトとして入れたいと思っていますが、どうすればできるのか分かりません。できればボタン等を介さずページをロードすればこPHPからjavascriptのdocument.write値がvalue値に入って欲しいと思っています。簡単なようで難しいことなのでしょうか?どうかご教授よろしくお願いいたします。

Aベストアンサー

それからどうでもいいけど
htmlのタグの順番が適当ですね。

Q食酢の中和滴定 誤差 教えてください

10倍希釈試料中の酸濃度の相対誤差を4.0%(二次標準液の誤差1.9%、ホールピペットの誤差0.2%、ビュレットの誤差1.9%)と求めました。原液中の相対誤差はどのようにして求めればよいかを教えてください。

Aベストアンサー

回答が遅くなりまして失礼いたしました。
補足ありがとうございます。

>|ΔX/X|が相対誤差である。

では、測定値Xと誤差ΔXの値はいくつですか?
実験したのであれば、それぞれの値が分かっているはずですね。

もし、それが分からないのであれば、何か勘違いがあるか、見落としている点があるということです。

測定値というのは実際に測定した値ですから、実験したのであれば、必ず測定値が分かっているはずです。もし、それが分からないようであれば、そもそも実験をちゃんとやっていないということになります。

次に誤差ですが、最初から誤差の値は分かりません。ですから誤差の値を求める実験・測定をしているはずです。もし、そうした測定をしていなければ、例えば、実験の各段階で、誤差をいくつであると仮定しているとか、何か誤差の値を求めるための条件があるはずです。

ですので、まずは、以上のことをきちんと整理して下さい。

Q

<input type="hidden" name = "hoge">があったとします。
これを、javascriptを使用し nameで検索します。
”hoge”を検索後、その”hoge”という名前を変更する方法を探しています。 

<input type="hidden" name = "hoge">
       ↓↓↓↓↓
<input type="hidden" name = "fuga"> 

リフレッシュ無しで、上記のようにnameを変える方法が知りたいです。

ご存知の方おりましたら、お手数ですが教えていただけませんでしょうか。
宜しくお願いいたします。

Aベストアンサー

タグが特定出来れば、setAttribute等で属性値を変更出来ます。
setAttribute("name","fuga")

Q測量の誤差全般について

標記の件について、ネットや参考書を読んでいるのですが、
恥ずかしながら今ひとつ理解できません。
すみませんが、御教示頂きたく宜しくお願い致します。

質問1
「確率誤差」とは50%の確率で生じる誤差の範囲とすると、「平均2乗誤差」も何%で生じる誤差の範囲とかで定義されるのでしょうか?(「平均2乗誤差」がイメージできなくて悩んでおります。)
 また、「平均2乗誤差」が「ガウスの誤差曲線」にどう関係するか合わせて御教示お願いします。
 

質問2
「確率誤差」は、下式の様に「標準偏差」や「平均2乗誤差」を使ってを求める様ですが、
それぞれ違った値で導かれた結果をどう理解して使い分けたらようのでしょうか?


ε=0.6745×標準偏差
ε=0.6745×平均2乗誤差

Aベストアンサー

ANo.2です。ANo.3の補足の質問にお答えします。

>誤差曲線は以下のような理解でよろしいでしょうか?

前回の文献の用語に従えば、そのとおりだと思います。

蛇足ですが、「確率誤差」や「平均2乗誤差」の大きさは、矢印の、中心線から左側部分(あるいは右側部分)の長さに一致します。

Qで、Q1に後で値を設定して表示するには

お世話になります。
<input type="text" name="Q1">で、Q1に後で値を設定して表示するにはどうしたら良いものでしょうか。
name="Q1"
と、しているので、
onMousedown="function()"
で、nameでしてしたエリアに値を書き込めば、できると思うのですが、
このfunction()をどのように書いたらよいものか、いろいろ調べてもわかりません。
何とかご教示願えないでしょうか。
よろしくお願いします。

Aベストアンサー

javascriptを利用することで出来ます。
こんな感じで動くでしょう。
ちなみにテキストボックスなどをjavascriptで操作する場合は
idをつけておくと便利です。

これ以上をやりたいというのであれば
参考URLなど見て勉強してみてください
<html>
<head>

</head>
<body>

<input type="text" id="Q1" name="Q1" onmousedown="hoge()">
</body>
<script type='text/javascript'>
function hoge()
{
Q1.value = ""; //""のなかに設定する値
}
</script>

参考URL:http://www.parkcity.ne.jp/~chaichan/src/javasc21.htm

Qランダム誤差と系統誤差

ランダム誤差→極限的に正規分布に従うようなランダムな誤差
系統誤差→「真の値」にたいして系統的にずれて観測されるランダムでない誤差

として、普通のものさしなどの公差や、読み取り誤差、また、電流計の公差はどちらにあたるでしょうか?

Aベストアンサー

#5お礼欄に関して
>A.「極限的に正規分布に従うようなランダムな誤差」
>B.「多数測定で誤差を低減できる」
>というのが全く同じことのように感じるということです。
多分同じことを別の表現で表しているのだと思います。

で、(1),(2)に関して、(2)は必ずしも成立しないような。(中心極限定理って、母集団の分布が正規分布である必要はなかったかと)

測定誤差に関しては、
a)真値がAの事象があって、
b)これを無限回測定したと仮定すると、測定結果は、平均値A'、分散σ2の集団になる。
c)有限回の測定は、b)を母集団として、そこから有限個抽出する操作に該当。
d)c)の平均値はb)の平均値A'に収束し、分散はσ2/N(中心極限定理)の正規分布に収束する

統計処理はc)からb)を推定する処理で、A'とAの差異(これが系統誤差になるかと)は検出できないように思います。

Qを選択した時にCtrl+Aになってほしい

ユーザーにURLをコピーしてもらいたいのですが、
<input type="text" name="url" value="http://xxx.com/xxx">
という項目があり、マウスを入力ボックスでクリックすると
Ctrl+Aを押した時と同じ動作にすることは可能でしょうか?

クリップボードにコピーするのは、IE7以降で警告が
出るようなので、Ctrl+Aで全選択してもらう方向で考えています。

Aベストアンサー

Googleで「javascript リファレンス」で検索したところ、
http://www.tohoho-web.com/js/form.htm#ElmText
というページがありました。

ここの「27. フォーム部品(テキスト部品)」に書かれている1文が
そのまま php4 さんの求めているものだと思いますよ。

Q平均誤差について

物理学の講義で判らなかったことですが、内容が数学的だったので、こちらで質問させてください。

平均誤差と確率誤差の違いが判りません。
講義で、平均誤差と確率誤差、最小二乗法、誤差の伝播の法則などを同時に教えられたので混乱しているのだと思います。
その時にとったノートは、とにかく黒板を写しただけになってしまい、何がどのことなのか判らなくなっています。
平均誤差・確率誤差を教えていただければ幸いです。
最小二乗法はなんとなく判ったので、誤差の伝播の法則はもう少し頑張ってみようと思います。

判りにくい質問文で申し訳ありませんが、よろしくお願いします。

Aベストアンサー

平均誤差eは、誤差の絶対値の平均値であり、式で示せば
e=Σ(i=1→n)|[各測定値]i-[平均値]|/n
これは概念としては単純なのですが、計算が難しく、物理に限らず一般に統計では、あまり用いられません。

そこで登場するのが確率誤差になります。

確率誤差というのは、その誤差を超えるものが全体の50%、誤差以内が50%という境界を定義する誤差で、標準偏差のの0.674倍です。
標準偏差をσ(シグマ)、標準誤差をεと表記します。
ε = 0.674σ
標準偏差σは分散Vの平方根です。
σ=√V
V=Σ(i=1→n)([各測定値]i-[平均値])^2 /n

標準偏差は非常によく用いられる概念なので、覚えること必須です。
エクセルの基本関数の一つでもあります。
(stdなんちゃら関数です)

学力試験の統計結果で「偏差値」が用いられますが、じつは、それは、平均値を50、標準偏差が10になるように統計処理したものなんです。
ですから、偏差値で言うと、50±6.74の範囲にいる受験者が全体の50%とということになります。
56.74以上の偏差値でしたら、4人に1人の優秀者ということですね。

ちなみに、50±10、すなわち、平均値±標準偏差の範囲には、全体の約68.3%が入ります。
偏差値60以上の人は、全体の15.8%になります。

平均誤差eは、誤差の絶対値の平均値であり、式で示せば
e=Σ(i=1→n)|[各測定値]i-[平均値]|/n
これは概念としては単純なのですが、計算が難しく、物理に限らず一般に統計では、あまり用いられません。

そこで登場するのが確率誤差になります。

確率誤差というのは、その誤差を超えるものが全体の50%、誤差以内が50%という境界を定義する誤差で、標準偏差のの0.674倍です。
標準偏差をσ(シグマ)、標準誤差をεと表記します。
ε = 0.674σ
標準偏差σは分散Vの平方根です。
σ=√V
...続きを読む

Qのイベントについて

<input type="file">でファイルを選択した時点にイベントを追加する方法を教えてもらえませんか?
セキュリティの観点から無理なのでしょうか?

Aベストアンサー

ファイルを選択した時点で、
onchange イベントが起こりますので、
それを利用すればいいです。
例:
<form name="File">
<input type="file" name="UPLOADFILE" onchange="alert(document.File.UPLOADFILE.value)">
</form>


人気Q&Aランキング

おすすめ情報