喫茶XRAYトップページ

[スレッド全体
]

[12445] 数値計算の誤差関係返信 削除
2018/11/14 (水) 23:17:01 Mr.XRAY
[ 06_数値の四捨五入等と数値を文字列にする関数類 ]
に Trunc 関数関係のサンプルを追加しました.

[ 08_関数の引数が数値を使用した式の時に発生する現象 ]
http://mrxray.on.coocan.jp/Delphi/plSamples/890_CalcError.htm#08

2018/11/15
別項目にしました.


[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;



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