variablen ganz groß?



  • hi
    kennt wer eine variable welche sehr große zaheln
    wie z.b. 6.022*10 hoch 23 etc.(avogarozahl)
    speichern kann?
    init etc. reicht dafü ja leider nicht aus.



  • double (dürfte Platz bis ca. 10^38 haben) - wenn das nicht reicht, brauchst du eine Spezialbibliothek (ala gmp).



  • hm also um sicherzugehen würde ich gern mit nem taschenrechner mithalten
    also hoch 99 wäre nicht schlecht.
    Allerdings bin ich ncoh relativ neu bei programmieren also wenn es geht nix kompliziertes;-)



  • Oder du schaust dir an, ob du Rechnung aufteilen kannst.
    Abtrennen der Zehnerpotenzen etc.



  • eher ungern.
    Da ich sowas sicher noch für andere dinge brauche.

    Und wenn wir schon dabei sind wie kann ich den hochzahlen eingeben?



  • Dann mußt Du Dir wohl nen eigenen Datentyp basteln, mit Operatorüberladung. Bei Fließkommazahlen stell ich mir das kompliziert vor - viel Spaß 😃



  • 6.022e23



  • UNeverNo schrieb:

    Dann mußt Du Dir wohl nen eigenen Datentyp basteln, mit Operatorüberladung. Bei Fließkommazahlen stell ich mir das kompliziert vor - viel Spaß 😃

    hö???
    bin schon froh wenn ich ne klasse basteln kann.



  • double kann bis 10^300nochwas, nagelt mich nicht auf den konkreten Exponenten fest, mit ca. 16 Stellen Genauigkeit. 10^38 isses bei float, aber nur etwa 7 Stellen.

    double avogadro = 6.022e23;
    


  • 64-Bit-Gleitkommazahl double
    80-Bit-Gleitkommazahl long double

    ich denke das das reichen wird;-)



  • Achja das programm dazu sieht bisjetz wiefolgt aus:

    /*
    Programm: Geschwindigkwitskonstante k
    Autor : *********
    */

    #include <iostream.h>
    #include <math.h>

    double exp(double x);

    int main ()

    {
    char dummy;

    int x=1,y=1;

    while (x<=y)
    {

    /*
    Formel um k zu berechnen!!
    k=(R*t/N*h) * exp (-dG/(R*t))
    */
    double t,dG,R,N,h,ef,b,a,k;

    cout << "Bitte Temperatur in Kelvin angeben" << endl;
    cin >> t;
    cout << "Bitte delta G in J/mol angeben " << endl;
    cin >> dG;

    R=8.314;
    N=6.022e23;
    h=6.6e-34;

    //Alle einfachen Variablen initialsiert

    ef=-dG/(R+t); //berechnung teil 2
    b=exp(ef); //übergabe und rükgabe von ef

    a=(R*t)/(N*h); //berechnung teil 1

    k=a*b;

    /*Progammschleife*/

    cout << "k= " << k << endl;
    cout << "Drucken sie 2 um das Programm zu beenden, drucken sie " << endl;
    cout << "1 fur weitere berechnungen" << endl;
    cin >> x;

    }

    cin >> dummy;
    return (0);
    }

    Könnt ihr mir was dazu sagen?
    z.b. ob das mit der exp funktion so richtig ist
    was man am stiel/oder generel verbesseren könnte?

    Achja und da ich neu i forum bin wäre es auchnoch net zu sagen ob
    ich für den programmtext lieber ein neuen treat hätte aufmachen sollen?



  • die Schleifenkonstruktion sieht etwas ungewohnt aus, besser wäre wohl so etwas:

    char c='J';
    while(toupper(c)=='J')
    {
      ...
      cout<<"nochmal rechnen (J/N)?";
      cin>>c;
    }
    

    Und da du die Zwischenwerte nicht benötigst, könntest du auch alle Rechnungen zu einem Ausdruck zusammenfassen:

    k = (R*t*exp(-dG/(R+t)))/(N*h);
    

    PS: Und die Konstanten solltest du auch als "const" deklarieren 😉



  • CStoll schrieb:

    die Schleifenkonstruktion sieht etwas ungewohnt aus, besser wäre wohl so etwas:

    char c='J';
    while(toupper(c)=='J')
    {
      ...
      cout<<"nochmal rechnen (J/N)?";
      cin>>c;
    }
    

    Und da du die Zwischenwerte nicht benötigst, könntest du auch alle Rechnungen zu einem Ausdruck zusammenfassen:

    k = (R*t*exp(-dG/(R+t)))/(N*h);
    

    interessant fürwas steht das touppert
    (bin in meinem c++ buch bisjetzt nur bei zahlen nicht bei buchstaben)



  • Princ_of_Galaxy schrieb:

    interessant fürwas steht das touppert

    Umwandlung in Großbuchstaben (damit ist es egal, ob jetzt 'j' oder 'J' eingegeben wurde).


Anmelden zum Antworten