喫茶XRAYトップページ

[スレッド全体
]

[12446] Re:数値計算の誤差関係返信 削除
2018/11/14 (水) 23:27:34 Mr.XRAY
> に Trunc 関数関係のサンプルを追加しました.

こんな例もあります.
動作確認は [890] のサンプルと同じで
Windows 7 U64(SP1) + Delhi XE(UP1) Pro です.

procedure TForm1.Button1Click(Sender: TObject);
var
  LInteger : Integer;
begin
  LInteger := Trunc(5 * 0.01 * 100);

  Memo1.Lines.Clear;
  Memo1.Lines.Add(IntToStr(LInteger));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  LInteger : Integer;
  LDouble  : Double;
begin
  LDouble := 5 * 0.01 * 100;
  LInteger := Trunc(LDouble);

  Memo1.Lines.Clear;
  Memo1.Lines.Add(IntToStr(LInteger));
end;



[12447] Re2:数値計算の誤差関係返信 削除
2018/11/14 (水) 23:32:02 Mr.XRAY
>   LInteger := Trunc(5 * 0.01 * 100);

ちょっと意味合いは違いますが,
数値計算では演算の誤差を避けるために以下のような工夫をすることがあります.

procedure TForm1.Button1Click(Sender: TObject);
var
  LInteger : Integer;
begin
  LInteger := Trunc(100  * 5 * 0.01);

  Memo1.Lines.Clear;
  Memo1.Lines.Add(IntToStr(LInteger));
end;



[12448] Re2:数値計算の誤差関係返信 削除
2018/11/14 (水) 23:48:40 Mr.XRAY
> こんな例もあります.

このような現象は以下のようにすれば発生しません.

  LInteger := Trunc(9.98 * 100);
   ↓
  LInteger := Trunc(9.98 * 100.0);


  LInteger := Trunc(5 * 0.01 * 100);
   ↓
  LInteger := Trunc(5.0 * 0.01 * 100.0);


以上を以って数値計算の誤差に関する講義を終了とします.
えっ !? 何も説明していない ? う〜む.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82