Results 1 to 7 of 7

Thread: Grote integers?

  1. #1

    Grote integers?

    Gegroet,

    Ik heb hetvolgende probleem, en ik weet niet hoe eraan te beginnen: hoe kan ik in Delphi werken met grote getallen (getallen van verschillende lijnen lang, om een encryptiealgoritme te implementeren)

    Delphi is nl beperkt in de lengte van zijn integers. De vraag is hoe daaromheen te raken.

    En vervolgend moet het uiteraard mogelijk zijn om met die grote getallen een aantal functies uit te voeren (* / + - MOD en DIV zou tof zijn )

    Groeten ,
    Tharkis

  2. #2
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Is een Int64 ook nog te klein? als dit zo is zou je even moeten zoeken naar, geloof ik, BigInt. Een library die grote integers ondersteunt. uiteraard kun je dan niet meer gebruik maken van de standaard operators als * / + - maar moet je de procedures gebruiken die die library heeft
    !

  3. #3
    En anders hoop ik dat je handig bent met rekenen. Ik heb in een zeer grijs verleden een zelfde probleem gehad met een rekenkundig compressie alogrithme. Je werkt dan op basis van lijsten van words (of doublewords), en je schikt dan over een onbeperkte grootte. Voor alle rekenkundige bewerkingen ben jezelf verantwoordelijk voor het doorschuiven van eventuele carry's en overflow checks. Ik ben er (een jaar of 15 geleden) uitgekomen, maar vraag me niet om het nog een keer te doen.

  4. #4
    Hoe groot is Int64 juist?
    is dit 2^64 = 1,84467*10^19 ?

    If so, dan is het nog te klein 'Slechts' 19 cijfertjes...

  5. #5
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    het is zelfs 2^63 omdat er ook negatief wordt gegaan..
    !

  6. #6
    hmm, kay

    Kijk, t'is eigenlijk hetvolgende: ik heb al lang geleden iets gevonden dat erg hard lijkt op wat ik zoek: FGInt (Fast Gigantic Integers); op http://triade.studentenweb.org

    Alleen zit er geen documentatie bij, en weet ik dus niet welke procedure wat doet...
    (me not know math too well ...)

    Dus als iemand mij zou kunnen uitleggen hoe ik deze dingen gebruik, ben ik ook geholpen

    Hieronder een extractje uit de code:

    --------------------------------
    Uses Windows, SysUtils, Controls, Math;

    Type
    TCompare = (Lt, St, Eq, Er);
    TSign = (negative, positive);
    TFGInt = Record
    Sign : TSign;
    Number : Array Of int64;
    End;

    Procedure zeronetochar8(Var g : char; Const x : String);
    Procedure zeronetochar6(Var g : integer; Const x : String);
    Procedure initialize8(Var trans : Array Of String);
    Procedure initialize6(Var trans : Array Of String);
    Procedure initialize6PGP(Var trans : Array Of String);
    Procedure ConvertBase256to64(Const str256 : String; Var str64 : String);
    Procedure ConvertBase64to256(Const str64 : String; Var str256 : String);
    Procedure ConvertBase256to2(Const str256 : String; Var str2 : String);
    Procedure ConvertBase64to2(Const str64 : String; Var str2 : String);
    Procedure ConvertBase2to256(str2 : String; Var str256 : String);
    Procedure ConvertBase2to64(str2 : String; Var str64 : String);
    Procedure ConvertBase256StringToHexString(Str256 : String; Var HexStr : String);
    Procedure ConvertHexStringToBase256String(HexStr : String; Var Str256 : String);
    Procedure PGPConvertBase256to64(Var str256, str64 : String);
    Procedure PGPConvertBase64to256(str64 : String; Var str256 : String);
    Procedure PGPConvertBase64to2(str64 : String; Var str2 : String);
    Procedure Base10StringToFGInt(Base10 : String; Var FGInt : TFGInt);
    Procedure FGIntToBase10String(Const FGInt : TFGInt; Var Base10 : String);
    Procedure FGIntDestroy(Var FGInt : TFGInt);
    Function FGIntCompareAbs(Const FGInt1, FGInt2 : TFGInt) : TCompare;
    Procedure FGIntAdd(Const FGInt1, FGInt2 : TFGInt; Var Sum : TFGInt);
    Procedure FGIntChangeSign(Var FGInt : TFGInt);
    Procedure FGIntSub(Var FGInt1, FGInt2, dif : TFGInt);
    Procedure FGIntMulByInt(Const FGInt : TFGInt; Var res : TFGInt; by : int64);
    Procedure FGIntMulByIntbis(Var FGInt : TFGInt; by : int64);
    Procedure FGIntDivByInt(Const FGInt : TFGInt; Var res : TFGInt; by : int64; Var modres : int64);
    Procedure FGIntDivByIntBis(Var FGInt : TFGInt; by : int64; Var modres : int64);
    Procedure FGIntModByInt(Const FGInt : TFGInt; by : int64; Var modres : int64);
    Procedure FGIntAbs(Var FGInt : TFGInt);
    Procedure FGIntCopy(Const FGInt1 : TFGInt; Var FGInt2 : TFGInt);
    Procedure FGIntShiftLeft(Var FGInt : TFGInt);
    Procedure FGIntShiftRight(Var FGInt : TFGInt);
    Procedure FGIntShiftRightBy31(Var FGInt : TFGInt);
    Procedure FGIntAddBis(Var FGInt1 : TFGInt; Const FGInt2 : TFGInt);
    Procedure FGIntSubBis(Var FGInt1 : TFGInt; Const FGInt2 : TFGInt);
    Procedure FGIntMul(Const FGInt1, FGInt2 : TFGInt; Var Prod : TFGInt);
    Procedure FGIntSquare(Const FGInt : TFGInt; Var Square : TFGInt);
    Procedure FGIntToBase2String(Const FGInt : TFGInt; Var S : String);
    Procedure Base2StringToFGInt(S : String; Var FGInt : TFGInt);
    Procedure FGIntToBase256String(Const FGInt : TFGInt; Var str256 : String);
    Procedure Base256StringToFGInt(str256 : String; Var FGInt : TFGInt);
    Procedure PGPMPIToFGInt(PGPMPI : String; Var FGInt : TFGInt);
    Procedure FGIntToPGPMPI(FGInt : TFGInt; Var PGPMPI : String);
    Procedure FGIntExp(Const FGInt, exp : TFGInt; Var res : TFGInt);
    Procedure FGIntFac(Const FGInt : TFGInt; Var res : TFGInt);
    Procedure FGIntShiftLeftBy31(Var FGInt : TFGInt);
    Procedure FGIntDivMod(Var FGInt1, FGInt2, QFGInt, MFGInt : TFGInt);
    Procedure FGIntDiv(Var FGInt1, FGInt2, QFGInt : TFGInt);
    Procedure FGIntMod(Var FGInt1, FGInt2, MFGInt : TFGInt);
    Procedure FGIntSquareMod(Var FGInt, Modb, FGIntSM : TFGInt);
    Procedure FGIntAddMod(Var FGInt1, FGInt2, base, FGIntres : TFGInt);
    Procedure FGIntMulMod(Var FGInt1, FGInt2, base, FGIntres : TFGInt);
    Procedure FGIntModExp(Var FGInt, exp, modb, res : TFGInt);
    Procedure FGIntModBis(Const FGInt : TFGInt; Var FGIntOut : TFGInt; b : longint; head : int64);
    Procedure FGIntMulModBis(Const FGInt1, FGInt2 : TFGInt; Var Prod : TFGInt; b : longint; head : int64);
    Procedure FGIntMontgomeryMod(Const GInt, base, baseInv : TFGInt; Var MGInt : TFGInt; b : longint; head : int64);
    Procedure FGIntMontgomeryModExp(Var FGInt, exp, modb, res : TFGInt);
    Procedure FGIntGCD(Const FGInt1, FGInt2 : TFGInt; Var GCD : TFGInt);
    Procedure FGIntLCM(Const FGInt1, FGInt2 : TFGInt; Var LCM : TFGInt);
    Procedure FGIntTrialDiv9999(Const FGInt : TFGInt; Var ok : boolean);
    Procedure FGIntRandom1(Var Seed, RandomFGInt : TFGInt);
    Procedure FGIntRabinMiller(Var FGIntp : TFGInt; nrtest : integer; Var ok : boolean);
    Procedure FGIntBezoutBachet(Var FGInt1, FGInt2, a, b : TFGInt);
    Procedure FGIntModInv(Const FGInt1, base : TFGInt; Var Inverse : TFGInt);
    Procedure FGIntPrimetest(Var FGIntp : TFGInt; nrRMtests : integer; Var ok : boolean);
    Procedure FGIntLegendreSymbol(Var a, p : TFGInt; Var L : integer);
    Procedure FGIntSquareRootModP(Square, Prime : TFGInt; Var SquareRoot : TFGInt);

    ----------------------------------------------------------

  7. #7
    zo te zien kun je met Base2/Base10/Base256ToFGInt een FGInt initialiseren,
    vervolgens kun je een van de bewerkingen er op los laten (bijv. FGIntAdd)

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Het grote NLDelphi Pannenkoekenfestijn
    By Marcel in forum De website
    Replies: 100
    Last Post: 26-Jun-05, 12:36
  2. Uit een string alle integers filteren
    By eagle00789 in forum Algemeen
    Replies: 9
    Last Post: 22-Mar-04, 22:34
  3. listview met integers
    By djeten in forum Algemeen
    Replies: 6
    Last Post: 12-Sep-03, 09:09
  4. Replies: 5
    Last Post: 15-Apr-03, 09:03
  5. Hele grote bestanden
    By Anoniem in forum Algemeen
    Replies: 8
    Last Post: 03-Apr-03, 17:19

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •