STD ::蓄積を使用してベクター要素の合計をカウントする最も正確な方法は何ですか? [複製

StackOverflow https://stackoverflow.com/questions/6800810

質問

可能な複製:
C ++フロート精度の質問

3つの最も正確な方法を決定して、STD ::蓄積を使用して、正の数のみになる可能性のあるベクトル要素の合計を計算するという問題があります。

1)

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

2)

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

3)

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

これは一種の就職のインタビューの質問です。だからこそ、合計を計算するこれらの特定の3つの方法を手に入れました。私は多くのことをしてWebを検索しましたが、違いを理解できませんでした。みんながそれを理解するのを手伝ってもらえますか?

役に立ちましたか?

解決

違いは本当に小さくなければなりませんが、数字が少ないことから始めると、わずかに正確になります。博覧会の目的で、フローティングポイント数には4桁の4桁と指数のみが含まれており、バイナリではなく10進数であることを検討してください。数字の使用:

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

追加する場合 c 最初に、次に a また b, 、2つのうち小さい方が表現から落ちて丸くなっています。の最終結果 c + b + a 降伏します 1000e4. 。一方で、追加します ab 最初にわかります 1e4 最初の中間値として、そしてそれを追加する c 降伏します 1001e4 これは、操作のより正確な結果です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top