Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi trunc(2)=1? (https://www.delphipraxis.net/11660-trunc-2-%3D1.html)

Chewie 11. Nov 2003 15:37

Re: trunc(2)=1?
 
Zitat:

Zitat von Tpercon
Zitat:

Zitat von Chewie
Es gibt Rechner, die das richtig ausrechnen :shock:

Oder sollte es if a =99.99 heißen :?

Schau mal:
Delphi-Quellcode:
  a := a - b;
kommt zweimal vor. :zwinker:


Mist, hatte ich gesehen, aber ich dachte, das würde aus Versehen zweimal dastehen :wall:

Wird Zeit, dass ich mal was esse, wenn ich sowas schon nicht mehr seh... :freak:

himitsu 11. Nov 2003 17:53

Re: trunc(2)=1?
 
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';


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz