喫茶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