dポイントプレゼントキャンペーン実施中!

プログラムでこの数列の和を求めるときに右から計算するときと左から計算するのでは結果が違うのですか?そんな話を聞いたので.それはなぜですか?そもそも趣味でやる程度のプログラミングでは意識する必要があるのでしょうか・・・?

A 回答 (3件)

実際に確認してみました。

(VC++6)

n = 10000000000
1/1 + 1/2 + ... + 1/(n-1) + 1/n = 21.64411759417110700000
1/n + 1/(n-1) + ... + 1/2 + 1/1 = 21.64411759416666200000

この誤差を意識する必要があるかどうかは、作ろうとするプログラムによります。
しかし、計算の仕方によっては無視できないほどの誤差が生じることも有ります。
一度、誤差について調べてみると良いでしょう。
一般的な誤差については、その影響を小さくする方法も知られています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます.わざわざ確認まで・・・.申し訳ないです.

お礼日時:2006/10/18 15:40

コンピュータでは、有限の桁数しか保持できません。


浮動小数点方式で大きな数から小さな数まで表現できても、保持できる有効桁は、同じなので、
大きい数字に小さい数字を足そうとしたりした場合、
小さい数字の桁を保持する桁が無い場合(捨てられてしまう)があります。

趣味でやるかどうかはともかく、
コンピュータで計算をさせる場合は、そうした保持できる桁数について考慮する必要があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/18 15:39

誤差の積もりかたが違うってことでしょうね。

    • good
    • 0

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