Grösst mögliche variable?



  • Hallo

    Welcher varialentyp, abgesehen von arrays oder strings, kann die grössten zahlen speichern???

    unsigned long long kann ja 12 byte, 20 stellen oder so. Gibts noch was grösseres?



  • unsigned long long ist nicht 12 sonder 8 Byte lang (64 Bit)

    soweit ich weiss gibt es von der Bitanzahl keinen größeren.
    double ist auch so groß (64 Bit) dekt aber einen viel größeren Bereich ab den es dann aber mit einer gewissen ungenauigkeit bezahlen muss.



  • Hallo,
    wenn du richtig grosse Zahlen abspeichern willst (z.B. grösser 170!), dann wirst du mit doubles und longs nicht weit kommen. In diesem Fall solltest du ein BigNum-Lib wie GMP oder NTL benutzen. Das sind natürlich keine nativen Datentypen mehr.



  • long double ist sehr lang und sollte bei den meisten Implementierungen der längste Typ sein.

    long long ist übrigens (noch?) kein Standard C++ und kommt von C99.

    #include <iostream>
    
    int main() {
      std::cout << "char: " << sizeof(char) << "\nshort: " << sizeof(short)
    	    << "\nint: " << sizeof(int) << "\nlong: " << sizeof(long)
    	    << "\nlong long: " << sizeof(long long) << "\n\nfloat: "
    	    << sizeof(float) << "\ndouble: " << sizeof(double)
    	    << "\nlong double: " << sizeof(long double) << "\n\nbool: "
    	    << sizeof(bool) << "\nwchar_t: " << sizeof(wchar_t) << '\n';
    }
    

    die Angaben hängen vom Compiler/Platform ab. Bei mir (Linux/IA32/GCC 3.3.4):

    char: 1
    short: 2
    int: 4
    long: 4
    long long: 8
    
    float: 4
    double: 8
    long double: 12
    
    bool: 1
    wchar_t: 4
    


  • Ich weiss nicht wozu, du die Variable brauchst.

    Um zB. in sehr grosse Dateien Offsets anspringen, und die auslesen reicht double.

    Willst du zB. nur Flieskommazahlen berechen float.

    Edit:
    Sorry haben sich wohl post überschnitten



  • Um zB. in sehr grosse Dateien Offsets anspringen, und die auslesen reicht double.

    Äh, wenn man wirklich mit großen Dateien arbeiten muss, dann nimmt man für die Offsets einen 64Bit Typ (long long) und kein double.



  • Also ich nimm double nur, um zB. dateigrössen oder so abzufragen.
    Und da reichte das immer aus.
    Auch sonst reichte double aber das es long long gibt wusste ich nicht.
    Wo liegt denn in long long der Vorteil gegenüber double?
    Vielleicht finde ich ja long long ja auch besser.



  • long long gibt es wie ich bereits gesagt habe nicht im C++ Standard.

    Aber der Vorteil ist, dass es sich um einen Integral Typ handelt und nicht um einen Floatingpoint Typ 🙄

    Und wenn du mit großen Dateien arbeitest, wird dir die Library sicher einen Offset Typ anbieten, der passend ist.



  • Also wenn ich mit seekp oder tellp arbeite nimm ich immer, double und hatte keine probleme.



  • Das nützt dir aber nichts, weil seekp und tellp selbst nicht mit double arbeiten, sondern mit streambuf::pos_type (was wohl ein typedef auf unsigned int oder dergleichen ist).



  • Dateien bis 2,1 GB oder so klappt das.



  • Zufällig entspricht das genau dem Wertebereich einer vorzeichenbehafteten 32bit-Zahl.



  • @kingruedi: wchar_t hat bei dir 4 Byte? Haben die nicht auf 32bit-Rechnern 2 Byte?

    MfG SideWinder



  • SideWinder schrieb:

    @kingruedi: wchar_t hat bei dir 4 Byte? Haben die nicht auf 32bit-Rechnern 2 Byte?

    verwechselst du das mit WCHAR aus der Winapi? 😉


Anmelden zum Antworten