>その値は179.9349999999995〜179.9350000000004の間にある?
あ〜,こういうことを書かれると手抜きした私の立場が. (^^;
立場を取り戻すために,こんなことやってみました.ヘヘヘッ
ほとんど意味ありませんが.
小数点 16 桁目を調べるために 16 乗しています.
16 桁目も 9 になっています.あとちょっとだったようです
思ったのですが,15 桁で丸めるというのは,内部処理でも精度 16 桁が限界
だからなのかも知れません.
//-----------------------------------------------------------------------------
// (1)と(2)の計算式は,数学的には等しく,179.935となる
//-----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
A, B, C, D, E, F : Extended;
IntE : Int64;
IntF : Int64;
begin
Memo1.Lines.Clear;
Memo1.Font.Name := 'MS ゴシック';
Memo1.Font.Size := 10;
A := 389.7;
B := 94.4;
c := 30;
D := 0.35;
E := (A + B + C) * D; //(1)
F := A * D + B * D + C * D; //(2)
//Int64は16乗が限界?
IntE := Trunc(E * Math.Power(10, 16));
IntF := Trunc(F * Math.Power(10, 16));
Memo1.Lines.Add(IntToStr(intE));
Memo1.Lines.Add(IntToStr(intF));
end;
|