Toon posts:

[Delphi/C] Groter dan int64

Pagina: 1
Acties:

Verwijderd

Topicstarter
Waar ik al een tijdje mee worstel is het volgende:
Is het met Delphi 4, 5 of 6 mogelijk om zelf types als long, int64 te definieren?
Ik zou graag bijvoorbeeld een 128-bits int willen gebruiken i.v.m. encryptie routine (gebruik makend van 'behoorlijk' hoge priemgetallen).
Kan iemand me een beetje op gang helpen aangezien Delphi niet verder gaat dan 64-bits integers?

Zelf had ik het volgende bedacht maar dit is geen ideale situatie aangezien je hier slecht mee kan rekenen.
code:
1
type TInt128=Array[0..127] of Boolean;

Hoe zou je met dit type berekeningen kunnen doen (met het oog op priemgetallen?)

Of moet ik meer in de volgende richting zoeken?
code:
1
2
3
4
5
type
  TInt128=record
    HiPart: Int64;
    LoPart: Int64;
  end;

Momenteel versleutel ik gewoon 2 keer met behulp van int64 priemgetallen maar in één keer zou natuurlijk veel leuker zijn!

Verwijderd

lijkt me lastig,
omdat je dan de standaard functies niet meer kan gebruiken (zoals +,-,sqrt),
je moet deze dan zelf implementeren.
voor de opslag zou je bv. een record met 2 int64's kunnen gebruiken.

Verwijderd

Array[0..127] of Boolean moet je NIET gebruiken, 1 boolean is namelijk 8 bits

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Op donderdag 20 december 2001 16:31 schreef deur het volgende:
Array[0..127] of Boolean moet je NIET gebruiken, 1 boolean is namelijk 8 bits
Sterker nog... Op windows systemen wordt hier gewoon een ruimte van 32 bits voor gereserveerd.. Je kunt beter een array[0..1] of int64 nemen.. Zelf een paar berekenfuncties schrijven.. Is helemaal niet zo heel erg moeilijk hoor :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

zoiets werkt misschien wel aardig:
code:
1
2
3
4
5
6
7
type
  TInt128=record
   case integer of
    0:(HiPart: Int64;LoPart: Int64;);
    1:(i1,i2,i3,i4:integer;);
    2:(b1,b2,b3,b4,b5,b6,b7,b8:byte;);
   end;

Verwijderd

trouwens volgens mij zijn hier al implementaties voor op internet te vinden, kijk bv. eens op www.torry.net

Verwijderd

Topicstarter
Op donderdag 20 december 2001 16:48 schreef deur het volgende:
trouwens volgens mij zijn hier al implementaties voor op internet te vinden, kijk bv. eens op www.torry.net
Iedereen bedankt voor de reactie.
Zoeken op torry.ru en google.com had niet veel resultaat op een aantal voorgebakken componenten na. (1tje was incl. source maar 34$ waarbij heel veel functionaliteit niet door mij gebruikt zou worden).

Om berekeningen uit te voeren was de record met case idd. handig maar ik snap 't nog niet helemaal.

Iemand anders dit al eens geprobeerd?

Verwijderd

Ik heb eens wat gemaakt in modula-2.
Ik heb een array van integers (16 bit toen) en in elke integer zet je 4 cijfers. Dit heet BCD codering.

dus arr=(123, 4567) stelt het getal 1234567 voor. Hier had ik 4 functies bij: add, sub, mul, div.

Dat hadden we nodig om 100! (faculteit) uit te rekenen.

Assembler vriendjes hadden het wat slimmer gedaan, en gebruikten alle bits van een integer, en gebruiken dan de overflow-flag van de registers.

Verwijderd

Topicstarter
Op vrijdag 21 december 2001 12:21 schreef Doekman het volgende:
Ik heb eens wat gemaakt in modula-2.
Ik heb een array van integers (16 bit toen) en in elke integer zet je 4 cijfers. Dit heet BCD codering.

dus arr=(123, 4567) stelt het getal 1234567 voor. Hier had ik 4 functies bij: add, sub, mul, div.

Dat hadden we nodig om 100! (faculteit) uit te rekenen.

Assembler vriendjes hadden het wat slimmer gedaan, en gebruikten alle bits van een integer, en gebruiken dan de overflow-flag van de registers.
Dat ga ik even proberen. Is misschien niet het snelste maar waarschijnlijk wel het makkelijkste voorlopig.

Vraag me wel af hoe lang het duurt voordat een leuk priemgetal gevonden is (één die vlak onder MaxInt128 zit).

Thanx

Verwijderd

Op vrijdag 21 december 2001 12:28 schreef hvdberg het volgende:Vraag me wel af hoe lang het duurt voordat een leuk priemgetal gevonden is (één die vlak onder MaxInt128 zit).
Moet je van boven af beginnen ;)
Pagina: 1