long zu klein



  • also ich habs mit long double probiert, dann gibt er z.B. 8.24824e+006 o.ä aus
    wegen dem __int64 schau ich mal nach, wobei ich nicht weiß nach was ich suchen soll.



  • in der doku hab ich jetzt gefunden dass es "unsigned long" auch gibt was ich immer mit unsigned long int verwechselt habe, in die aber auch nur die größe bis zu 4294967295 reinpasst...da muss es doch noch eine andere möglichkeit geben...ich will zwar jetzt keinen taschenrechner machen, aber taschenrechner können sowas ja auch



  • Bei 64^8 muss etwas mehr 'rauskommen!

    Bei Formatierung muss "%Lf" angegeben werden! (laut Syntax)



  • wie geht das? könntest du mir da ein codebeispiel geben bitte?



  • Kann nur mit Standard C oder C++ Builder dienen:

    long double Wert=1;
    char Str[256];
    for (int i=0;i<8;i++)
    {
    Wert*=64;
    sprintf(Str,"%Lf",Wert);//Standard in <stdio.h>

    //Memo1->Lines->Add(Str); //Das ist vom CBuilder.
    //Hier musst Du ne eigene Ausgabe machen! 😉
    }



  • danke
    (jetzt müsste ich nurnoch wissen was
    "sprintf(Str,"%Lf",Wert);"
    bewirkt, mach seid 1tag c++ und die umstellung von php auf c++ is größer als ich gedacht habe^^
    ich probiers auf jeden Fall aber wäre nett wenn du mir das noch erläutern könntest



  • Funktionieren tuts wohl?

    Mit der Erklaerung mach ich mich hier bestimmt unbeliebt (C++- Forum!, 'tschuldigung an alle)

    sprintf ist ne Standardfunktion von C.

    Legt in Str (Das ist ein char- Buffer) das Formatierte Ergebnis aus Wert ab.

    Wert ist der zu 'konvertierende Zahlenwert.

    Der mittlere Parameter - "%Lf" - ist der Formatstring. Der legt fest, wie Wert zu interpretieren ist.
    -- f ist float
    -- lf ist 'long float' = double
    -- Lf ist long double

    In C++ wird's auch was geben. Aber ich mach C oder CBuilder.



  • hilft das?

    #include <string>
    #include <iostream>
    using namespace std;
    
    const string i64tostr(const unsigned __int64 & n)
    {
        string ergebnis;
        do
        {
            ergebnis.insert( 0, n % 10 + '0' );
            n /= 10;
        }while(n);
        return ergebnis;
    }
    
    int main()
    {
        unsigned __int64 foo = 0xFFFFFFFFFFFFFFFF;
        cout << i64tostr( foo ) << endl;
        return 0;
    }
    

    oder das hier http://cplus.kompf.de/artikel/gmp.html ?

    [ Dieser Beitrag wurde am 17.03.2003 um 23:25 Uhr von Dimah editiert. ]



  • danke!



  • @ Dimah

    Hi, nur interessenhalber:

    Gibts in Eurer C++ String- Klasse auch was fuer long double?

    Falls Zahlen noch groesser werden.



  • wie meinst du das?



  • Original erstellt von <len0X>:
    in der doku hab ich jetzt gefunden dass es "unsigned long" auch gibt was ich immer mit unsigned long int verwechselt habe, in die aber auch nur die größe bis zu 4294967295 reinpasst...da muss es doch noch eine andere möglichkeit geben...ich will zwar jetzt keinen taschenrechner machen, aber taschenrechner können sowas ja auch

    #usigned long und unsigned long int sind dasselbe.



  • das gmp sieht ja abartig aus. such dir lieber eine klasse. init & clear, wo leben wir denn!
    und das ganze gerede um int64 und long double und so ist sinnlos. floating points sind nicht genau genug und int64 kann nicht annaehernd 64^8 darstellen.



  • Nur ne Frage .... wieso passt 64^8 nicht in nen Float oder double ?

    float = -3.4E38 < x < +3.4E38
    Da passt es imho locker rein 🙂
    nur ned ganz so genau .... auf 6-7 Stellen

    Das ist ja der witz der Flieskommazahlen 🙂

    Ich hoffe das verwirrt jetzt ned allzusehr ...

    ciao ...



  • @PeterTheMaster:

    Du hast ne komische Mathematik:

    int64 kann nicht annaehernd 64^8 darstellen.

    😃

    648=(8*8)8=(23*23)8=(26)8=248 ca. 2.81*10^14 (15 Stellig!)

    2^64 ca. 1.84*10^19 (20 Stellig) !!!Da past das aber locker 'rein!!!

    @XYZ
    Long double hat 19 Stellen, da past 64^8 noch GENAU rein (Das ist der Sinn von long double fuer wissenschaftliche Berechnungen!)

    @Dimah
    Ich dachte die C++ string- Klasse hat Constructoren fur Zahlen oder Konverterfunktionen (Ich mach BCB, der hat sowas). Meine Frage war: Kann damit ein long double konvertiert werden in string? Gibt's sowas in C++?



  • Solche Konvertierungskonstruktoren gibt es nicht. Vielleicht suchst du Stringstreams.



  • Danke Bashar, da bleib ich lieber beim BCB. :p
    (Der macht's aber auch nur bis double) 😮

    [ Dieser Beitrag wurde am 18.03.2003 um 17:23 Uhr von DerAltenburger editiert. ]



  • hi dimah kannst du mir mal bitte erklären was du in der funktion int64tostr machst . also eigentlich was du der insert funktion übergibst...

    mfg dohan



  • @Dohan

    //ASCII- Code von 'letzter' Stelle an string- Anfang
      ergebnis.insert( 0, n % 10 + '0' );
      //Zahl 'zehnteln
      n /= 10;
    

    0, : an erste Stelle in String
    n%10, : n Modulo 10 (Restwertdivision) = Wert der EinerStelle
    + '0' : ASCICODE von Zeichen Null 😉



  • also der modulo op % liefert den rest einer ganzzahl diviesion z.b.
    112 / 10 = 11 Rest 2
    5547 / 10 = 554 Rest 7
    also man merkt das % 10 einen die letzte ziffer liefert.

    was bedeutet jetzt dieses + '0'?
    '0' ist ein zeichenliteral, ein char und ein char ist nix weiter als eine zahl.
    z.b. 48

    n   % 10 + '0'
    112 % 10 + '0'
    112 % 10 + 48
    2        + 48
    -------------
               50
    

    und unter 50 ist das ascii zeichen '2'


Anmelden zum Antworten