Vraag & Antwoord

Programmeren

C(++) | Werken met hele grote getallen

5 antwoorden
  • Ik ben bezig met een programma in C++ dat onder andere ook met grote positieve getallen moet kunnen omgaan (met groot bedoel ik getallen die 200 cijfers lang zijn (dus 1*10^200)). sizeof(unsigned long) = 4. Dus het grootste getal waarmee ik kan werken is 2^32 = 4294967296. In *nix heb je ook een unsigned long long die zijn 8 bytes lang maar niet groot genoeg (2^64 = 18446744073709551616). Ik zou een eigen datatype kunnen gaan maken maar ik vermoed dat er vast wel een open-source (oid) oplossing te vinden moet zijn. Ik heb al een tijd gezocht op internet maar kan niets vinden, een structure of een klasse, die dit wel kan. Weet iemand een site met een oplossing of moet ik toch gewoon zelf een nieuw datatype gaan maken? Alvast bedankt, Joppe
  • Tja, de hamvraag is natuurlijk weer, waarom zou je dat willen? Moet je ook floating point berekeningen kunnen maken op 200 cijfers achter de komma? Wat je zou kunnnen doen is gebruik te maken van fixed point berekeningen. Dat wil zeggen dat je bits gaat shiften in registers. Zoek maar eens op "fixed point" in google. Maar eerst wel ff handig om te vermelden waarom je zo'n grote precisie nodig hebt, want dat heb ik nog nooit gezien (just curious) :)
  • Effe voor de duidelijkheid... De Intel processor ondersteunt de 64-bits integer als grootste rekenkundige eenheid. Groter dan dat wordt gewoon niet door de processor ondersteund. Om toch met grotere getallen kunnen werken zul je zelf je eigen routines moeten maken voor diverse rekenkundige bewerkingen. Verder zul je ook moeten bepalen in wat voor vorm je de nummers opslaat. (Binair of als ascii-tekst.) Voor het werken met grote getallen moet je ook eens gaan zoeken naar encryptie-technologieen aangezien hier juist veel grote getallen worden gebruikt.
  • Alvas bedankt voor jullie reacties. Ik heb zoals WA al aangeeft zulke grote getallen nodig omdat ik met een eigen projectje bezig ben verschillende soorten encryptie technieken te implementeren en te bestuderen. Ik hou me nu bezig met RSA en het is gebruikelijk dat de public key 200 cijfers lang is. Misschien zal ik dan dus toch mijn eigen datatype moeten maken en de daarbij behorende rekenkundige operatoren moeten overloaden (het is ff een paar uur werk maar dan moet het wel werken). Ik zal inderdaad ook welk rond open-source varianten gaan kijken hoe zij dan zulke grote getallen inlezen misschien dat dat me verder helpt. Joppe
  • In Hugs (Haskell) kun je gebruik maken van integers van oneindige (nou ja, zover je geheugen het toelaat) grootte. Weliswaar geen C(++) maar misschien heb je er wat aan. http://www.haskell.org/hugs/

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.