Schachbrett



  • Optimizer schrieb:

    EDIT: Sowas sollte man mit einer 128Bit Ganzzahl berechnen.

    Und aus welchem Grund? Eine unsigned 64-Bit Ganzzahl tut es auch. Aber was spricht gegen eine Fließkommazahl?

    EDIT:
    @hanna1: Du bist dir im klaren, dass du mit dem Programm die Anzahl der Körner auf dem letzten Feld und nicht die Summe aller Körner auf dem Brett berechnest?



  • Meine Version:

    #include <iostream>
    #include <ostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Auf dem letzten Feld liegen 2^64 Körner" << endl;
      cout << "Auf dem Schachbrett liegen insgesamt 2^65-1 Körner" << endl;
    }
    

    🤡
    Aber die Ergebnisse stimmen exakt.

    MfG Jester



  • @Jester: Aufschlussreicher Beitrag. Wo doch morgen Fettdonnerstag ist 🤡 .



  • Okay, noch ne ernsthafte Antwort:

    Ich schätze, es könnte nicht schade koerner mit 1.0 zu initialisieren.



  • MaSTaH schrieb:

    Optimizer schrieb:

    EDIT: Sowas sollte man mit einer 128Bit Ganzzahl berechnen.

    Und aus welchem Grund? Eine unsigned 64-Bit Ganzzahl tut es auch. Aber was spricht gegen eine Fließkommazahl?

    Nein, 64Bit reichen nicht.



  • Hallo
    Vielen Dank erst einmal für eure schnellen Anworten. Haut mir ruhig was auf die Glocke ich kann es vertragen. Ich kann nicht 'cstdio' schreiben dann meckert mein Compiler mit einer Fehlermeldung ich habe einen WATCOM 11.0. Ich habe void in int umbenannt und in der Berechungszeile so einiges probiert bis auf diesen Eintrag gekommen bin.
    koerner = koerner + koerner + 2; und als ERgebnis = 3.68935e+019 erhalten.
    Da ja einer von euch geschrieben hatte des es eine 19stellige Zhl ein müsste.
    Wenn mir das jemand bestätigen könnte wäre ich sehr dankbar.

    hubspie



  • [quote="MaSTaH"]1.62597e-260 ist trotzdem ein falsches Ergebnis. Zuerst solltest du dir mal int main angewöhnen, da void main schlicht gesagt falsch ist. Und dann lässt du das .h bei iostream.h weg und schreibst cstdio statt stdio.h. Nun brauchst du nur noch koerner mit 1 zu initialisieren.[/quote]

    Hallo
    Ich kann nicht cstdio schreiben dann meckert mein Compiler mit einer Fehlermeldung ich habe einen WATCOM 11.0 Compiler.
    Dann habe ich void gegen int gewechselt und in der
    Berechnungszeile koerner = koerner + koerner + 2; geschrieben und das Ergebnis
    3.68935e+019 erhalten ich würde mich freuen wenn du das bestätigen könntest.
    Ich weis nicht ob ich das jetzt richtig gemacht ahbe mit dem Antworten es ist das erste Mal.
    hanna1



  • Ja, die Zahl klingt in ihrer Größenordnung realistisch.



  • Jester schrieb:

    Meine Version:

    #include <iostream>
    #include <ostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Auf dem letzten Feld liegen 2^64 Körner" << endl;
      cout << "Auf dem Schachbrett liegen insgesamt 2^65-1 Körner" << endl;
    }
    

    🤡
    Aber die Ergebnisse stimmen exakt.

    MfG Jester

    Da muss ich wiedersprechen. Auf dem ersten Feld liegen ein Korn = 2^0
    1: 2^0
    2: 2^1
    3: 2^2
    ...
    64: 2^63

    Dann sind es insgesamt 2^64-1
    Wobei mir mein Taschenrechner liefert:
    letztes Feld: 2^63 = 9,223372037e+18
    insgesamt: 2^64-1 = 1,844674407e+19



  • Stimmt... hast recht. Dann reichen übrigens auch die 64bit unsigned. 🙂



  • Jo. 🙂
    Wir haben beide den selben Denkfehler gemacht. Die Zahl wird nur 63mal verdoppelt.



  • [quote="Entyl_Sa"][quote="Jester"]Meine Version:

    #include <iostream>
    #include <ostream>
    
    using namespace std;
    
    int main()
    {
      cout << "Auf dem letzten Feld liegen 2^64 Körner" << endl;
      cout << "Auf dem Schachbrett liegen insgesamt 2^65-1 Körner" << endl;
    }
    

    🤡
    Aber die Ergebnisse stimmen exakt.

    MfG Jester[/quote]
    Da muss ich wiedersprechen. Auf dem ersten Feld liegen ein Korn = 2^0
    1: 2^0
    2: 2^1
    3: 2^2
    ...
    64: 2^63

    Dann sind es insgesamt 2^64-1
    Wobei mir mein Taschenrechner liefert:
    letztes Feld: 2^63 = 9,223372037e+18
    insgesamt: 2^64-1 = 1,844674407e+19[/quote]

    Hallo erst Mal
    Zu dem Schachbrett muss ich erst mal noch einiges sagen. Ich kompiliere im 32 Bit-Modus und da kann ich mit int-Zahlen nur +4 294 967 295 verarbeiten also kann 'int auch nicht richtig sein es muss 'float' oder 'double' sein ich habe 'double' genommen und jetzt habe ich das selbe Ergebnis wie Du nämlich
    1.84467e+019 ich hoffe wir sind uns jetzt einig und hoffe auf weitere gute Zuammenarbeit. bis bald hanna1



  • Du kannst ja auch im 32 Bit-Mode 64-Bit Zahlen verwenden. Werden halt beim berechnen immer in 2 32-Bit Befehle aufgespalten.

    unsigned long long


Anmelden zum Antworten