[C] grote waardes opslaan

Pagina: 1
Acties:

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
Ik moet waardes van meer dan 100 gigabyte, opslaan als bytes.
Dat word dus iets als; 254367587654
Helaas is dat 100x groter dan wat er in een unsigned long past.
(ik moet er namelijk ook mee kunnen rekenen)
Is er een andere manier om met zulke getallen om te kunnen gaan?
(zonder dat er precisie verloren gaat)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 21:46

johnwoo

3S-GTE

Als het over VC++ gaat, dan kun je een __int64 gebruiken. Andere compilers hebben wellicht ook wel een vergelijkbaar 64 bits type, of anders kun je misschien een double gebruiken.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Zynth schreef op 24 augustus 2002 @ 12:35:
Ik moet waardes van meer dan 100 gigabyte, opslaan als bytes.
Dat word dus iets als; 254367587654
Helaas is dat 100x groter dan wat er in een unsigned long past.
(ik moet er namelijk ook mee kunnen rekenen)
Is er een andere manier om met zulke getallen om te kunnen gaan?
(zonder dat er precisie verloren gaat)
Ik denk dat je 100 miljard bedoelt ipv 100 Gb.

Ik ben helaas alleen bekent met de data types in c++, maar die zullen niet veel verschillen van die in c. Een double is 8 bytes, dus 64 bit. 264 = 18446744073709551616 = groot zat.

Als je een beetje handig bent met getallen kun je ook je eigen datatype maken met een variabele lengte. Je kunt bijvoorbeeld een paar unsigned integers gebruiken om een groter getal te maken. Een int is 4 bytes dus 216 = 65536. Als je een groter getal wilt opslaan bv 10065536, dan sla je die 100 op in een int en die 65536 in een andere int. De eerste int moet je dan behandelen alsof die 216 meer waard is. Maar dat word allemaal wel erg lastig in c. (zonder classes enzo)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 24 augustus 2002 @ 14:28:
[...]

Ik denk dat je 100 miljard bedoelt ipv 100 Gb.

Ik ben helaas alleen bekent met de data types in c++, maar die zullen niet veel verschillen van die in c. Een double is 8 bytes, dus 64 bit. 264 = 18446744073709551616 = groot zat.


een double is idd 64 bits, maar maar 52 bits worden gebruikt voor de mantissa. Het grootste gehele getal is dus maar 253 = 9007199254740992

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:09
Meestal is een 'long long int' een 64 bits integer, maar dit kan wel eens per compiler en platform verschilen (de Microsoft compiler gebruikt in ieder geval __int64). Probeer maar uit wat voor jou werkt!

Doubles gebruiken om gehele getallen in op te slaan is meestal een slecht idee, ook al zou het in theorie passen; dan kun je beter 64 bits integers gebruiken of zelf een big numeral class schrijven.