SRC質問掲示板Mk2
(現在 過去ログ72 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■13477 / inTopicNo.1)  何故? 計算が合いません。
  
□投稿者/ スレイブ -(2004/04/24(Sat) 13:25:58)
    限定的な内容ですみません。

    Set tmp2 190

    For tmp1 = 1 To 25
     Set tmp2 (tmp2 + 2 * 20 / 25)
    Next

    この様な式でtmp2を出力し、直後にInt(tmp2)を参照した場合、
    何故か229が返されてしまいます。
    25で除算したものを25回加算している訳ですから、"230"が返される筈なのですが、
    一体Intは何を切り捨てているのでしょう・・・?
    ちなみにIntを使わずに参照すると"229."が返されます。何故小数点が・・・

    私の勘違いでしょうか? それともバグでしょうか。
    どこをどう調べれば良いのか解りません、ご指導下さい。
引用返信/返信 削除キー/
■13478 / inTopicNo.2)  Re[1]: 何故? 計算が合いません。
□投稿者/ GAMEMASTER -(2004/04/24(Sat) 14:00:10)
http://nagoya.cool.ne.jp/gamemaster/
     お初にお目にかかります。
     SRCユーザーの1人「GAMEMASTER」と申します。

    > 限定的な内容ですみません。
    >
    > Set tmp2 190
    >
    > For tmp1 = 1 To 25
    >  Set tmp2 (tmp2 + 2 * 20 / 25)
    > Next
    >
    > この様な式でtmp2を出力し、直後にInt(tmp2)を参照した場合、
    > 何故か229が返されてしまいます。
    > 25で除算したものを25回加算している訳ですから、"230"が返される筈なのですが、
    > 一体Intは何を切り捨てているのでしょう・・・?
    > ちなみにIntを使わずに参照すると"229."が返されます。何故小数点が・・・
    >
    > 私の勘違いでしょうか? それともバグでしょうか。

     (tmp2 - 230)を参照したところ、-0.00000000000014210854715202という値が得られました。即ち、厳密には230より小さい値となっています。
     これはForコマンドのループ中に加算している値が整数でない(2 * 20 / 25 = 1.6)場合に発生する現象で、整数が加算され続けた場合はこの現象は発生しません。
     バグか仕様かは不明です。

     参考になれば幸いです。

     もう時間がないようでございますね。では、これにて退散させてもらいましょう。
引用返信/返信 削除キー/
■13479 / inTopicNo.3)  Re[2]: 何故? 計算が合いません。
□投稿者/ スレイブ -(2004/04/24(Sat) 14:38:28)
    回答ありがとうございます。
    どうりで解らないはずです、仕様だとしたら迷惑な話です。

    最終のループで整数を強引に加算する事も出来ますが、
    算術的にこの問題を回避する事は可能でしょうか?
引用返信/返信 削除キー/
■13480 / inTopicNo.4)  Re[3]: 何故? 計算が合いません。
□投稿者/ スレイブ -(2004/04/24(Sat) 14:58:10)
    解決しました。
    ご指導有難うございます。
解決済み!
引用返信/返信 削除キー/
■13481 / inTopicNo.5)  コンピューターの技術論
□投稿者/ 間宮 -(2004/04/24(Sat) 19:50:00)
    解決してるのに発言すいません。
    このタイプの計算が合わないのは、コンピューターすべてに共通しています。
    理由は、人間が10進法で計算する所を、コンピューターは2進法で計算しているからです。
    代表例は

    for i = 1 to 100
    incr x 00.1
    next

    ですね。この答えは0.999・・・になりますので。(倍精度の場合。単精度ならもっと誤差が出ます。)

    小難しい話、すいません。
    バグで報告しても解決できないと思いましたので。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -