Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » variablen größer als unsigned long int?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.12.2003, 16:39 Uhr
~rammellaus
Gast


kann man zahlen größer als 4294967295 (unsigned long int) in einer variable speichern? kann ich zahlen wie 2^20996011 -1 net darstellen? (ist die momentan größte primzahl die bekannt ist)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.12.2003, 16:45 Uhr
Pablo
Supertux
(Operator)


2^32 kannst du nicht mehr mit long darstellen. Ich würde dann double oder float dafür nehmen, man muss aber auf die Rundungsfehler aufpassen. Ich würde sagen, so eine Große Zahl kann man mit PC nicht mehr darstellen (wenn ich mich nicht irre) und wenn schon nur mit eine Emulation von double Zahlen. Wenn ich mich nicht irre, habe ich sowas bei Java gesehen. Wo du sicherlcih sowas bekommen kannst ist in Scheme oder eine andere Funktionelle Sprache. Dort habe ich schon 17 Seiten mit der Dartsellung einer einzigen zahl bekommen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.12.2003, 17:04 Uhr
0xdeadbeef
Gott
(Operator)


In C99 gibt es noch einen Datentyp "long long", der auf 32 bit-Maschinen idR 64 bit lang ist, aber für deine Primzahl wird das auch nicht reichen. Es gibt verschiedene Möglichkeiten, einen derart langen Datentyp zu emulieren; darunter leidet allerdings die Geschwindigkeit erheblich. Schau mal hier: www.gnu.org/software/gmp/
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.12.2003, 17:13 Uhr
Pablo
Supertux
(Operator)


Also,
ich habe das in C gemacht:

C++:
#include <stdio.h>
#include <math.h>
int main()
{
        double d = pow(2, 20996011) -1;
        printf("%f\n", d);
        return 0;
}


Die Ausgabe ist inf.

In Scheme habe ich das gemacht:

Code:
(define (pow x y)
  (if (= y 0) 1
      (* x (pow x (- y 1)))))
(- (pow 2 20996011) 1)


arbeitet immer noch, wie viele Seiten ich bekomme und wann ist nur die Frage
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.12.2003, 17:47 Uhr
0xdeadbeef
Gott
(Operator)


Probiers mal so:

Code:
(define (pow b e)
  (define (pow_aux x r)
    (cond ((= r              1 )                         x)
          ((= 0 (remainder r 2)) (pow_aux (* x x) (/ r 2)))
          (else                  (pow_aux (* x b) (- r 1)))))
  (pow_aux b e))


Das wird zwar bei dem Exponenten immer noch ne Weile dauern, aber zumindest skaliert es mit O(log(n))
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 28.12.2003 um 17:49 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.12.2003, 18:28 Uhr
Pablo
Supertux
(Operator)


Wahrscheinlich, aber ich werde es nicht versuchen, denn das wird bestimmt ein paar Stunden dauern und hab keinen Bock 100 Seiten zu lesen, wenn ich das Ergebnis bekomme. Aber ich muss immer wieder staunen, was Scheme kann.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: