long zu klein



  • Falls du MSVC++ oder den BCC verwendest könnte dir __int64 helfen und beim GCC long long. Grösser musst du auf spezielle Libs zurückgreifen, die Suche ist da dein Freund.



  • also mit __int64 hab ichs schon probiert, aber wenn ich dann mit cout << varname; das ergebnis ausgeben lassen will kommt, dass der parameter "<<" zweideutig sei.
    long long hat nicht funktioniert



  • Ich kenn mich mit dem MSVC++ nicht aus, aber probier mal in der Doku ne Möglichkeit zu finden um __int64 in nen String umzuwandeln, welchen du dann ausgibst.



  • In C gibts long double, der muesste in C++ doch auch da sein!

    hat 19 Stellen bis reichlich 10^4000. Das mueste langen.



  • 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.


Anmelden zum Antworten