Thema: Delphi trunc(2)=1?

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

Re: trunc(2)=1?

  Alt 11. Nov 2003, 18:53
Aus der OH:
Zitat:
Typ: Double
Bereich: 5.0 x 10^-324 .. 1.7 x 10^308
Signifikante Stellen: 15-16
Größe in Byte: 8
Zitat:
FloatToStr konvertiert die mit Value angegebene Gleitkommazahl in die entsprechende String-Darstellung. Bei der Operation wird das allgemeine Zahlenformat mit 15 signifikanten Stellen verwendet.
Hab's mir mal durchgerechnet, so wie es vermutlich der Co-Prozessor rechnet:
Delphi-Quellcode:
so ist es im Rechner: und so ungerundet:
********************************************* ****************************************

z := 9 * (1 / 24); z := 9 * (1 / 24);
z := 9 * 0,0416666666666667{15}; z := 9 * 0,04166666...;
z := 0,375000000000003{15}; z := 0,375;

anfang := 7 * (1 / 24); anfang := 7 * (1 / 24);
anfang := 7 * 0,0416666666666667{15}; anfang := 7 * 0,04166666...;
anfang := 0,291666666666669{16}; anfang := 0,29166666...;

h := (z - anfang) / (1 / 24); h := (z - anfang) / (1 / 24);
h := (0,375..{15} - 0,2916..{15}) / (1 / 24); h := (0,375 - 0,29166666...) / (1 / 24);
h := 0,0833333333333333{15} / 0,0416..{15}; h := 0,0833333... / 0,04166666...;
h := 1,999999999999998{16}; h := 2;

F2S := floattostr(h);
F2S := floattostr(1,999999999999998{16});
       {1,999999999999998}
F2S := '2,00000000000000'{15};
F2S := '2'{15};

T := trunc(h);
T := trunc(1,999999999999998{16});
T := '1';
Wenn ab nur ein kleines bissl anders gerundet wird, kommt gleich mal etwas anderes raus:
Delphi-Quellcode:
z := 9 * (1 / 24);
z := 9 * 0,0416666666666667{15};
z := 0,375000000000003{15};

anfang := 7 * (1 / 24);
anfang := 7 * 0,0416666666666667{15};
anfang := 0,2916666666666669{15};

h := (z - anfang) / (1 / 24);
h := (0,375..{15} - 0,291..{15}) / (1 / 24);
h := 0,0833333333333361{15} / 0,0416..{15};
h := 2,000000000000065{16};

F2S := floattostr(h);
F2S := floattostr(2,000000000000065{16});
F2S := '2,00000000000007'{15};

T := trunc(h);
T := trunc(2,000000000000065{16});
T := '2';
Delphi-Quellcode:
z := 9 * (1 / 24);
        {0,04166666...}
z := 9 * 0,0416666666666667{15};
    {0,37500000000000003}
z := 0,375000000000000{15};
z := 0,375{15};

anfang := 7 * (1 / 24);
anfang := 7 * 0,0416666666666667{15};
         {0,2916666666666669}
anfang := 0,291666666666667{15};

h := (z - anfang) / (1 / 24);
h := (0,375{15} - 0,2916..{16}) / (1 / 24);
    {0,083333333333333}
h := 0,0833333333333330{15} / 0,0416..{15};
    {1,9999999999999904000000000000077...}
h := 1,999999999999990{16};

F2S := floattostr(h);
F2S := floattostr(1,999999999999990{16});
F2S := '1,99999999999999'{15};

T := trunc(h);
T := trunc(1,9999999999999904{16});
T := '1';
$2B or not $2B
  Mit Zitat antworten Zitat