トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     浮動小数点の演算について
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
kumaneko
Åê¹ÆNo.13534
投稿日時: 2004-12-21 17:17
新米
居住地: 北海道
投稿: 4
使用環境:
浮動小数点の演算について
皆さま、はじめまして。
初めての投稿になりますが、よろしくお願い致します。

もしかしたら、すごく初歩的な質問なのかもしれませんが、
スクリプトで演算させていたところ
演算結果が合わないという事態に遭遇しました。
テストとして以下の2種類のスクリプトを実行して比較してみます。

?演算テスト その1?

a = 0.999999999999999;
b = 0.000000000000001;
c = a + b;
d = c - b;
e = d - a;
trace("a="+a+"\n"+"b="+b+"\n"+"c(a+b)="+c+"\n"+"d(c-b)="+d+"\n"+"e(d-a)="+e);


すると、出力ウインドウに
a=0.999999999999999
b=1e-15
c(a+b)=1
d(c-b)=0.999999999999999
e(d-a)=0
と表示されるのですが、これは問題ありませんよね。
で、次に以下を実行してみます。

?演算テスト その2?

a = 0.999999999999999;
b = 0.0000000000000011;
c = a + b;
d = c - b;
e = d - a;
trace("a="+a+"\n"+"b="+b+"\n"+"c(a+b)="+c+"\n"+"d(c-b)="+d+"\n"+"e(d-a)="+e);


すると今度は、
a=0.999999999999999
b=1.1e-15
c(a+b)=1
d(c-b)=0.999999999999999
e(d-a)=-1.11022302462516e-16
と表示されます。

ここで問題になってくるのが、
「e(d-a)=0」にならないって事です。
表示では「d(c-b)=0.999999999999999」の筈が、
「a=0.999999999999999」と合わないんですね。

その場合「a」の値と「d」の値を比較させて条件分岐したい場合に支障が出てきてしまいますよね。

内部演算の仕方とかは分からないし、
ましてプログラマーってわけでもないので、
浮動小数点の演算の仕組みとか詳しいこともわからないですし、
もしかしたら見当違いのことを言っているかもしれません。
だけど、なぜ「表示上では同じ値」なのに「0」にならないのか不思議なのです。

同じような計算を「JavaScript」(1桁増やしてますが)でやってみると、きちんと「e(d-a)=0」になりますし。
一応、ページにしてみました。
テストページ

それで、できれば回避したいのですが、やっぱり「Math.round()」とかで、

a = 0.999999999999999;
b = 0.0000000000000011;
b = Math.round(b*Math.pow(10,15))/Math.pow(10,15);
c = a + b;
d = c - b;
e = d - a;
trace("a="+a+"\n"+"b="+b+"\n"+"c(a+b)="+c+"\n"+"d(c-b)="+d+"\n"+"e(d-a)="+e);


このようにしないとダメなのでしょうか?

見かけ上は同じ値なのにエラー(条件分岐で)が出たので気がついたのですが、
ウチだけ特殊ってことはないですよね。(汗)

ご意見を頂ければと思って書き込みました。
よろしくお願い致します。
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » 浮動小数点の演算について kumaneko 2004-12-21 17:17
     Re: 浮動小数点の演算について mayor 2004-12-21 19:21
       Re: 浮動小数点の演算について Fumio 2004-12-21 21:13
         Re: 浮動小数点の演算について kumaneko 2004-12-23 19:01
           Re: 浮動小数点の演算について Fumio 2004-12-23 21:45
             Re: 浮動小数点の演算について kumaneko 2004-12-25 23:30
               Re: 浮動小数点の演算について salvox 2004-12-26 4:58
                 Re: 浮動小数点の演算について Fumio 2004-12-26 6:07
                   Re: 浮動小数点の演算について salvox 2004-12-26 16:19
                     Re: 浮動小数点の演算について kumaneko 2004-12-29 11:34

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops