掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
演算結果の誤差に関して (ID:36447)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> Delphiをはじめてからこのような現象は見たような見てないような感覚なので教えて下さい。 C言語による最新アルゴリズム辞典のサンプルをDelphiに移植してみました。 Delphi2010での実行結果は、 Sum1が1.99999999999989 Sum2が2 となりました。 function Sum1(n: Integer; a: array of Double): Double; var i: Integer; d: double; begin d := 0; for i := 0 to n - 1 do d := d + a[i]; Result := d; end; function Sum2(n: Integer; a: array of Double): Double; var i: Integer; r, s, t: double; begin //s は和, r は積み残し r := 0; s := 0; for i := 0 to n - 1 do begin r := r + a[i]; // 積み残し + 加えたい値 t := s; // 前回までの和 s := s + r; // 和を更新 t := t - s; // 実際に積まれた値の符号を変えたもの r := r + t; // 積み残し end; Result := s; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; a: array[0..10000] of double; begin a[0] := 1; for i := 1 to 10000 do a[i] := 0.0001; //1 + 0.0001 + ... + 0.0001 = 2 Memo1.Lines.Add(FloatToStr(Sum1(10001, a))); Memo1.Lines.Add(FloatToStr(Sum2(10001, a))); end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.