Utopische 20stellige Genauigkeit



  • Hi!

    Die Compiler-Genauigkeit des C++ Builder beträgt max. 15 Stellen, interpretiert long double wie double. Der Typ long double ist daher bei den Grundrechenarten mindeststens so genau wie double, lediglich die math. Funktionen (Winkelfunktion) vom Typ long double sind mindestens auf 18 Stellen genau.
    Wie frisiert man den Compiler, so dass der Typ long double auch in den Grundrechnarten auf 19-20 Stellen genau rechnet? Die Stellenzahl ist einfach notwendig, um Aufrundungsfehler in math. Progr. zu vermeiden.

    :p

    Alles Wissen ist nur Erinnerung.



  • 32-Bit Datentypen, Größen und Bereiche
    
    Typ   Größe (Bits)   Bereich   Beispielanwendungen
    
    unsigned char   8   0 <= X <= 255   Kleine Zahlen und kompletter PC-Zeichensatz
    char   8   -128 <= X <= 127   Sehr kleine Zahlen und ASCII-Zeichen
    short int   16   -32.768 <= X <= 32.767   Zähler, kleine Zahlen, Schleifensteuerung
    unsigned int   32   0 <= X <= 4.294.967.295   Große Zahlen und Schleifen
    int   32   -2,147,483,648 to 2,147,483,647   Zähler, kleine Zahlen, Schleifensteuerung
    unsigned long   32   0 <= X <= 4.294.967.295   Astronomische Distanzen
    
    enum   32   -2.147.483.648 <= X <= 2.147.483.647   Geordnete Wertemengen
    long   32   -2.147.483.648 <= X <= 2.147.483.647   Sehr große Zahlen, statistische Grundgesamtheiten
    float   32   1,18  10^-38 < |X| < 3,40  10^38   Wissenschaftlich, 7-stellige Genauigkeit
    double   64   2,23  10^-308 < |X| < 1.79  10^308   Wissenschaftlich, 15-stellige Genauigkeit
    long double   80   3,37  10^-4932 < |X| < 1.18  10^4932   Finanzrechnung, 18-stellige Genauigkeit
    

    wie wäre es wenn du Extended nimmst?

    Typ   Bereich    Signifikante Stellen   Größe in Byte
    Real48   2.9 x 1039 .. 1.7 x 1038   11-12   6
    Single   1.5 x 1045 .. 3.4 x 1038   7-8   4
    Double   5.0 x 10324 .. 1.7 x 10308   15-16   8
    Extended   3.6 x 104951 .. 1.1 x 104932   19-20   10
    Comp   263+1 .. 263 1   19-20   8
    Currency   922337203685477.5808.. 922337203685477.5807   19-20   8
    

    bzw. gibts auch libs die dir beliebig viele nachkommastellen simulieren.

    [ Dieser Beitrag wurde am 22.01.2003 um 15:14 Uhr von Sunday editiert. ]



  • Egal welcher Datentyp. Die max. Genauigkeit des C++ Builder Compilers entspricht nur dem Typ double.

    Schau schau:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    #include <iostream.h>
    #include <conio.h>
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
    int main(int argc, char* argv[])
    {
    float ffloat;
    double ddouble;
    long double ldouble;
    Extended eex;
    ffloat=ddouble=ldouble=eex = 10.0/3.0;
    cout.precision(40);
    
    cout << "float......: " << 8*sizeof(ffloat) << " Bit " << ffloat << "\n";
    cout << "double.....: " << 8*sizeof(ddouble) << " Bit " << ddouble << "\n";
    cout << "long double: " << 8*sizeof(ldouble) << " Bit " << ldouble << "\n";
    cout << "Extended...: " << 8*sizeof(eex) << " Bit " << eex << "\n";
    getch();
    
            return 0;
    }
    //---------------------------------------------------------------------------
    

Anmelden zum Antworten