Toon posts:

[delphi] 128-bits integer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoewel er reeds eerder een aantal topics over integers over het algemeen en zeer grote integers geweest zijn kom ik er toch niet helemaal uit.

Wat is namelijk het probleem: ik wil grotere getallen dan int64 in Delphi 4/5/6.

Wat ik nu heb:
code:
1
2
3
4
5
6
7
  TInt128rec = Packed Record
    case Integer of    //
    0: (A1, B1: Int64);
    1: (A2, B2, C2, D2: Integer);
    2: (A3, B3, C3, D3, E3, F3, G3, H3: Word);
    3: (A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, N4, O4, P4: Byte);
    end;

Kom er alleen niet uit hoe ik hier nu mee kan rekenen of bijv. een 128-bits integer zou kunnen weergeven. Ook alleen een array geprobeerd maar ook hier snap ik niet zo veel van.

Weet iemand waar ik verder moet zoeken?

Verwijderd

Topicstarter
't Is kennelijk moelijk... :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

Ach ja :)

simpel is het niet nee.

Ik denk dat je deel voor deel moet optellen, en dan kijken of er een overflow optreedt. Eigenlijk net als optellen op een papiertje
code:
1
2
3
4
5
  1    <--- Dit is dus de overflow.
1237
1235+
-----
1472

Alleen stelt dan elk cijfer een integer deel voor.
De precies overflow berekening is niet zo moeilijk, als je kan uitvogelen (en dat kan) hoe groot je integer deel precies kan zijn. overflow = int2 -(MAXGROOTE - int1) (als je int1 + int2 doet dus). Is de overflow negatief, dan hoef je niks te doen, want dan kan int1+int2 berekend worden zonder overflow. Is de overflow positief dan is dat dus precies het deel wat teveel is. De overflow is dan de waarde van het deel waarmee je aan het rekenen bent, het volgende deel moet je dan met 1 ophogen.

Hmm.. waarschijnlijk is het nog een stuk makkelijk als je alles in bits gaat behandelen. bits optellen is super simpel, en een overflow is ook makkelijker te detecteren, en mee te nemen naar het volgende deel.

Maar je zult wel voor alles dan een eigen operator (of functie) moeten maken om er mee te kunnen rekenen, op het scherm tonen etc.

Negatieve getallen wordt dan ook weer leuk. Zul je zelf het 2 complement systeem moeten gaan nadoen.

Pff.. zijn er geen (computer)wiskundigen die het ff wat duidelijker uit kunnen leggen? :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

hmmm reageren op exceptions word wel extreem traag.

misschien kun je je beperken tot een aantal operaties (optellen, vermenigvuldigen) dat zou het wel makkelijker maken.

Materie

Verwijderd

Topicstarter
Op maandag 28 januari 2002 14:36 schreef Materie het volgende:
hmmm reageren op exceptions word wel extreem traag.

misschien kun je je beperken tot een aantal operaties (optellen, vermenigvuldigen) dat zou het wel makkelijker maken.

Materie
Het optellen zal wel lukken als je bijv. steeds groepjes van 1 tot 4 cijfers pakt. Vermenigvuldigen gaat ook wel maar delen zal idd. een stuk moeilijker zijn. Bovendien zit je dan te kloten met arrays of strings.

Maar hoe bijv. een getal als (High(Int64)*4)/3 weer te geven is mij een raadsel. Of wil ik nu te veel!

Ik wil het voornamelijk voor priemgetallen gaan gebruiken en bovenstaande berekening is puur om aan te geven waar mijn problemen liggen.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

Delen zal ook wel gaan hoor. Ik had ergens (uit m'n MSX tijdperk) nog een assembler tutorial liggen om 2 gehele getallen door elkaar te delen. Werd op de manier van een staartdeling gedaan (dus desnoods ook met getallen achter de komma)

Delen (met gehele getallen) blijft in principe een kwestie van meerdere keren aftrekken, net zoals als vermenigvuldigen een kwestie van meerdere keren optellen is.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1