möchte mit langen Ganzzahlen rechnen
-
Ingo schrieb:
Ich möchte mit Ganzzahlen im Bereich von ca. 100 Milliarden rechnen. long int reicht aber nur von ca. -2 bis +2 Millidarden, unsigned bis knapp über 4 Milliarden. Kann einer einen Rat geben, wie man trotzdem mit Werten darüber rechnen kann?
Das kommt aber auf die Sprache an, wie groß ein long ist.
In Java und C# hast du damit einen Wertebereich von -2^63 bis +2^63-1, das reicht also für deine 100 Milliarden locker aus. Unter C++ kannst du ja mal für 64Bit compilieren oder "long long int" benutzen.
-
Da ich den VC 6.0 und BCB 5.0 habe, kann ich das mit long long int wohl vergessen. Das ist wirklich ärgerlich.
-
Mit VC 6.0 funktioniert __int64.
-
Mit unsigned _int64 oder unsigned long long kannst du bis 18 Trillionen rechnen. Hier ein Beispiel:
//Version für Compiler wie den Dev-C++ mit unsigned long long: // Berechnung der "3n+1"-Folge (Collatz-Folge) #include <iostream> #include <conio.h> using namespace std; int main() { /*********************************************************** Eingabebereich ****************************/ const unsigned long long element_limit = 1000000 ; // Maximum H(n) const unsigned long long element_print_limit = 1000 ; // Ausgabe nur, wenn H(n) > element_print_limit const unsigned long long start = 1000000000000000000 ; // Beginn der Berechnung bei start const unsigned long long end = 2000000000000000000 ; // Ende der Berechnung bei end /*********************************************************** Eingabebereich ****************************/ for( unsigned long long j = start; j < end; j++ ) { unsigned long long zahl = j ; unsigned long long i = 1 ; while( ( zahl != 1 ) && ( i <= element_limit ) ) { if( zahl % 2 == 0 ) zahl /= 2 ; else zahl = 3 * zahl + 1 ; i++ ; } if( zahl == 1 ) { if( i > element_print_limit ) { cout << "Startzahl: " << j; cout << "\tAnzahl: " << i << endl; } } else { cout << "Startzahl: " << j; cout << "kein Resultat (Anzahl-Limit erhoehen)" << endl; } if( i > element_limit ) cerr << "Anzahl zu hoch" << endl; } getch(); }
-
das ist aber meines Wissens nicht portabel.
-
@E. H.: Ich danke dir für das Posting, aber mein VC akzeptiert das leider nicht.
__int64: arbeitet leider nicht mit cin und cout zusammen. Oder muss man noch was einbinden?
-
Nein, das sollte schon gehen.
-
VC akzeptiert das leider nicht.
Ersetze long long durch _int64 (falls MSVC++ 6), MSVC++ 7.1 akzeptiert long long (stammt von C).
-
__int64: arbeitet leider nicht mit cin und cout zusammen.
es geht mit printf(...) da gibt es ein passendes format flag. Muss mal suchen.
siehe mal hier:
http://www.c-plusplus.net/forum/viewtopic.php?t=46148&highlight=int64+printf
-
Danke, das funktioniert schon mal ziemlich gut, soweit ich das bis jetzt überblicke!