2011-07-23 1 views
4

可能性の重複:
C++ float precision questionstd :: accumulateを使用してベクトル要素の合計を数える最も正確な方法は何ですか?

私は唯一の正の数であることができ、ベクトルの要素の合計を計算するために3つの中で最も正確な方法を決定する問題を持っています、 std :: accumulateを使用します。

1)

double sum(vector<float> &v) 
{ 
    return accumulate(v.begin(), v.end(), 0.0); 
} 

2)

​​

3)

double sum(vector<float> &v) 
{ 
    sort(v.begin(), v.end(), greater<float>()); 
    return accumulate(v.begin(), v.end(), 0.0); 
} 

これは私が計算するこれらの特定の三つの方法を得た理由です、就職の面接の質問の一種であります合計。私はウェブをたくさん探しましたが、違いを理解できませんでした。みんながそれを理解するのを助けてくれますか?

+1

「一種の就職面接の質問」とはどういう意味ですか?仕事の面接に合格するための助けを求めていますか? –

+0

絶対値でソートし、小さい方から開始します。それがなぜあるのか考えることができます。 –

+0

@Marcelo Cantosいいえ、私は就職の面接に合格するよう求めていません。この仕事は就職インタビューで一度だけだったので、私は就職のためのインタビューの準備をして、別の仕事をしています – rightaway717

答えて

4

差は実際には小さくなければなりませんが、小さい数字からは少し正確になります。あなたの浮動小数点数には4桁の有効数字と指数しか含まれておらず、バイナリではなく10進数であることを説明するために検討することを検討してください。数字を使用して:私たちはc最初に、そしてaまたはbのいずれかを追加した場合

a = 5000 
b = 5000 
c = 1000e4 (10000000) 

、表現オフ2つの滝の小さい方と丸みを帯びています。 c + b + aの最終結果は1000e4となります。一方、abを最初に追加すると、最初の中間値として1e4が得られ、それをcに加えると、より正確な結果が得られる1001e4になります。

+1

違いは*巨大*かもしれません、他の質問のベンチマークを見てください。 –

関連する問題