Umgehung von long int
-
was meinste damit?
was sind floats?
ich tippe einfach nur 1000! ein und fertig ist.
dann kommt ne super interessante zahl raus.
-
Und wie wird die dargestellt? 98726348723 * 10^x oder wie?
-
wie installiert man dises gmp zeugs. krieg ich nich hin
-
????? schrieb:
wie installiert man dises gmp zeugs. krieg ich nich hin
Wenn du Windows nutzt, kann ich dir das nicht sagen. Unter gentoo mittels
'emerge gmp' und unter FreeBSD in die mathe-ports -> libgmp4 und ein 'make install
clean'.mfg
v R
-
Optimizer schrieb:
Und wie wird die dargestellt? 98726348723 * 10^x oder wie?
ich hab nochmal nachgeguckt, er kann nur 449! rechnen, was dann ungefähr xx*E997 wäre.
-
Jo sieht so aus, als würde er mit floats rechnen. Damit kannst du natürlich auch arbeiten, das Ergebnis spiegelt dann aber lediglich eine Größenordnung wieder.
Für solche gigantischen Zahlen brauchst du Klassen, die selbstständig ihren Speicherbedarf erweitern und beliebig große Zahlen repräsentieren können. Für Java gibt es sowas als java.math.BigInteger, für C++ gibt es auch Bibliotheken dafür.
-
gibs diese auch in Ansi C??
-
(1) Also wir hatten das grad in einer Vorlesung: Willst du mit sehr sehr großen Zahlen rechnen, musst du eine eigene Darstellung wählen.
Beispielsweise kannst du ein Byte-Array verwenden. Jedes Byte repräsentiert einen Teil einer sehr großen Zahl, zur Basis 256.
Dann musst du irgendwie die Multiplikation implementieren, und damit dann die Fakultät - wie es aber genau geht kann ich nicht sagen und Quellcode hab ich auch nicht.(2) Wenn es aber nur ein Bisschen größer sein soll, reicht ja auch schon double als Typ aus! Also in etwa so:
double Fac(WORD nNumber) { if (nNumber > MAX_FAC) return 0; double qResult = 1; for (WORD i = 1; i < nNumber; ++i) qResult *= (i + 1); return qResult; }
oder mit __int64:
typedef unsigned __int64 QWORD; QWORD Fac(BYTE nNumber) { if (nNumber > 20) return 0; QWORD qResult = 1; for (BYTE i = 1; i < nNumber; ++i) qResult *= (i + 1); return qResult; }
Damit kannst du aber nur maximal 20! ausrechnen.
-
Optimizer schrieb:
Jo sieht so aus, als würde er mit floats rechnen. Damit kannst du natürlich auch arbeiten, das Ergebnis spiegelt dann aber lediglich eine Größenordnung wieder.
Da wäre ich mir nicht so sicher...
Beispielsweise kannst du ein Byte-Array verwenden. Jedes Byte repräsentiert einen Teil einer sehr großen Zahl, zur Basis 256.
Wenn schon dann aber bitte zur Basis (unsigned int) oder besser das ganze noch als Template dann kannst du auch (unsigned long long) nutzen wenn vorhanden. Ich hatte so eine Klasse mal geschrieben. Addition, Substraktion und Multiplikation (mittels ^2 Trick nicht per x fache Addition) klappten. An der Division bin ich dann aber gescheitert, das heist ich hatte es erst gar nicht versucht
.
-
Ben04 schrieb:
Optimizer schrieb:
Jo sieht so aus, als würde er mit floats rechnen. Damit kannst du natürlich auch arbeiten, das Ergebnis spiegelt dann aber lediglich eine Größenordnung wieder.
Da wäre ich mir nicht so sicher...
Beispielsweise kannst du ein Byte-Array verwenden. Jedes Byte repräsentiert einen Teil einer sehr großen Zahl, zur Basis 256.
Wenn schon dann aber bitte zur Basis 2^32 (unsigned int) oder besser das ganze noch als Template dann kannst du auch 2^64 (unsigned long long) nutzen wenn vorhanden. Ich hatte so eine Klasse mal geschrieben. Addition, Substraktion und Multiplikation (mittels ^2 Trick nicht per x fache Addition) klappten. An der Division bin ich dann aber gescheitert, das heist ich hatte es erst gar nicht versucht
.