Rekenen met extreem grote getallen

Status
Niet open voor verdere reacties.

hitme007

Gebruiker
Lid geworden
16 jun 2004
Berichten
131
Hallo allemaal,

ik wil graag rekenen met getallen die bestaan uit meer dan 1.000.000 cijfers.

Welke taal kan ik hier het beste voor gebruiken?

Grtz, J.
 
Kijk eens hier onder zoeken naar grote getallen.
Gisteren heb ik ook zoiets voorbij zien komen.
 
Het ligt niet zozeer aan de programmeertaal die je moet gebruiken, maar het is eerder de vraag of de processor van je pc een floating-point voor dergelijke astronomische getallen wel ondersteunt. Bij de meeste programmeertalen kun je voor een hoge berekening(maar niet zoals je dat stelde) een variabele van het Double type(8 bytes gereserveerd) gebruiken. Voor jouw extreme hoge getallen gaat dit niet, je krijgt dan een overflow, die 8 bytes is nog lang niet toereikend.

Aangezien er geen enkel display bestaat voor zo'n groot getal, wordt zo'n getal in de E-notatie weergegeven.

Ga eens naar een universiteit om cpu-time v.e. supercomputer te gebruiken.

Dennis.
 
Geplaatst door hitme007
Hallo allemaal,

ik wil graag rekenen met getallen die bestaan uit meer dan 1.000.000 cijfers.

Welke taal kan ik hier het beste voor gebruiken?

Grtz, J.

Vraagje; wat wil je precies gaan berekenen?
 
Geplaatst door XP_PC
Vraagje; wat wil je precies gaan berekenen?
Daar ben ik eigenlijk ook benieuwd naar.

@hitme007, ik was ooit ergens in Friesland voor mijn werk(plaatsnaam ben ik inmiddels vergeten) om een supercomputer van NEC te bezichtigen. De UVA heeft ooit cpu-time van die supercomputer moeten 'lenen' om de eigenaardigheid van het getal PI te onderzoeken. Zoek je soms ook in die richting?

Dennis.
 
Het grootste positief getal dat met de programmeertaal VB in de E-notaie kan worden verkregen is 1.79769313486232E308, hiervoor moet je dan het datatype double(het hoogste wat er is) gebruiken.

1.79769313486232E308 is bij verre na niet in de buurt van 1.000.000 cijfers.
Ga je nog verder dan genoemde getal(hierboven in de E-notatie), dan volgt er een 'overflow' melding. De processor is daarop niet berekend.

Dennis.
 
Heeft volgens mij meer te maken met het gealloceerde geheugen voor die variabele.

Dit stukje perl code berekent bijvoorbeeld netjes 2^524288 (zo'n 150.000 cijfers):

Code:
use Math::BigInt;
my $value = Math::BigInt->new(2);
$value->bpow(524288);
print $value->bstr(  ), "\n";
 
Ja nteusink, dit alles is zo interessant. Ik houd mij tegenwoordig op dit gebied niet meer zo erg bezig.

Wel wil ik de vermelding even kwijt, dat mijn lievelings Mainframe indertijd een VM/370 was. Met die mainframe heb ik ooit een 20-tal A4 vellen als uitvoer gehad tijdens de berekening van het getal PI. Dat is nogal wat. Maar die gedachte om een getal te genereren dat >= 1.000.000 is, is bij mij nooit opgekomen.

Dennis.

PS. Ook met DEC(VMS) kun je dergelijke berekeningen gaan maken. Verder heb ik met OS/390(het vroegere MVS/ESA) gewerkt. Ik heb ook Perl op mijn pc, zal straks misschien even kijken. Maar ik heb een gewone Intel processor, het is niet eens een 64bits machine.
 
Leuk spul inderdaad :)

Heb helaas nooit op zulke mainframes gewerkt.

Werk hier trouwens ook op een gewone P4 laptop. Brengt me trouwens wel op het idee om een paar 64 bits Sun workstations op school eens via ssh aan het werk te zetten aan een paar van die berekeningen :)
 
Ja, leuk idee;)

Was even weg, vandaar zo laat mijn reactie.

Dennis.

PS. Hebben we op het werk ovrigens ook die 64 bits Sun workstations. Doe daar verder niet zo erg veel mee. sorry, was heus niet van plan om over die mainframes te gaan praten, maar de vraagstelling van hitmee007 heeft mij ertoe bewogen dat wel te moeten doen. Was trouwens vergeten te zeggen, dat ik met die VM/370 de programmeertaal REXX gebruik heb.
 
Laatst bewerkt:
Hoi jongens, het is idd bedoelt om grote priemgetallen mee uit te rekenen...

Ik ben er ook achter dat ik de berekening zoals ik die wil hebben uit kan voeren in PHP, alleen schiet dat niet op, omdat je dan pas over 3 jaar een antwoord krijgt van de server ;) (dat is overigens met de functie bcMath)

In JAVA schijnt er zoiets te zijn als BigInteger alleen kom ik er geen wijs uit hoe ik dat moet gebruiken...
Heeft iemand mss een stukje voorbeeldcode voor me waarbij je bijvoorbeeld 2 getallen van elk 1.000.000 cijfers deelt door elkaar ofzo?.

Grtz,
Jochem
 
hitme007,

Ik ben nog steeds van mening dat er in elke microprocessor van elke pc geen enkel register betstaat die zo'n astronomisch getal kan vasthouden. De oplossing om zo'n extreem hoog getal te kunnen weergeven moet men aan parallel processing gaan doen door je computer een onderdeel te laten maken v.e. heel groot netwerk. Maar daarmee ben je nog niet klaar, er moet daarvoor ook nog de benodigde 'distributed processing' software worden geschreven.

Ik houd mij daarmee ook niet verder bezig.

Dennis.
 
Ja, je weet het maar nooit, misschien wel binnen niet al te lange tijd.

Eigenlijk zijn wij(die internet hebben) nu al een onderdeel v.e. zeer groot netwerk, en dat grote netwerk is het World Wide Web zelf. Zo kunnen we bijvoorbeeld tezamen onze krachten gaan bundelen(is niet goed te praten wat ik hier zeg, maar ik doelde op een virus schrijver) om een ddos aanval uit te voeren. Zo zou @hitme007 ook te werk moeten gaan, maar dan voor het verbreken v.h. record der priemgetallen(een positieve bezigheid in elk geval).

Dennis.
 
Geplaatst door DENNIS90
Ik ben nog steeds van mening dat er in elke microprocessor van elke pc geen enkel register betstaat die zo'n astronomisch getal kan vasthouden.

Dat ben ik met je eens, maar dat is volgens mij ook niet nodig. Het is mogelijk, het gaat alleen niet erg snel :)
De krachten bundelen is dan inderdaad een goed idee. Een virus is misschien een iets minder goede strategie ;), gelukkig bestaat er al een geschikt project: :) http://www.mersenne.org/
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan