mschnell hat geschrieben:Gibt es nicht schon Tausende solcher Bibliotheken ?
Die meisten Arithmetik Pakete für große Interger Zahlen arbeiten mit arrays of 32 Bit Zahlen zur Darstellung der super-Integers. Dieses hier auch, ist natürlich auch OK, aber wenn man eine 64-Bit Prozessor hat ist die Arithmetik natürlich doppelt so schnell, wenn arrays of 64 Bit Zahlen verwendet werden.
Bruch-Arithmetik ist natürlich ein super-Spezial-Ding (auch dafür gibt es sicher irgendwelche Anwendungen (weil exakte Rechnung und nicht gerundet wie bei normaler Gleitpunkt-Arithmetik). Normale Gleitpunkt-Arithmetik (mit Exponent und Mantisse) arbeitet aber viel schneller und lässt sich auch auf langen Integers aufbauen.
Euklid hat geschrieben: Es ist kein Problem, aus dem dword ein qword zu machen. Jedoch muss dazu FreePascal ein 16-Byte-Typ unterstützen, damit es mit der Multiplikation keine Probleme gibt. Denn dword mal dword gibt qword, doch welchen Typ für qword-Multiplikationen?
32-Bit-Prozessoren unterstützen 64-bit "nativ", indem zwei Register hintereinander geschaltet werden können. Ich nehme an, ähnliches geht mit 64-bit-Prozessoren hinsichtlich 128-bittigen Zahlen. Wenn diese bald durch FreePascal unterstützt werden sollten, werde ich die entsprechenden Anpassungen an GNURZ vornehmen.
mschnell hat geschrieben:Hmmm. Und wie unterstützt der 32 Bit FP-Compiler 32Bit*32Bit => 64 Bit ? Oder verwendest Du Assembler an dieser Stelle ?
function GNZMillerRabin(zahl:GNZTyp; it:word):boolean;
function GNZMRPrimdanach(zahl:GNZTyp; it:word):GNZTyp;
function GNZPotenzMod(Basis,Exponent,Modulo:GNZTyp):GNZTyp;
function GNZZufall(Obergrenze:GNZTyp):GNZTyp;
mschnell hat geschrieben:P.S.: FPC kann doch operator overloading. Wäre das nicht praktisch ?
Euklid hat geschrieben:...
Die GNURZ Arithmetik-Unit beinhaltet in der Version 0.99.3 nun auch einen Zufallsgenerator:
EUGENE: Habe ein vorzeitiges Weihnachtsgeschenk an dich:
Werde im laufe der kommenden Tage einen neuen Variablentyp einführen, den GGZTyp. Er wird negative Zahlen unterstützen.
Euklid hat geschrieben:mschnell hat geschrieben:P.S.: FPC kann doch operator overloading. Wäre das nicht praktisch ?
Mit der Einführung von 64bit-Operatoren ließe sich die Berechnungsgeschwindigkeit für sehr große Zahlen fast verdoppeln. Wen EugenE das machen möchte, wäre daher eine von mir sehr willkommene Optimierung.
Euklid hat geschrieben:Werde im laufe der kommenden Tage einen neuen Variablentyp einführen, den GGZTyp. Er wird negative Zahlen unterstützen.
function GNZtoGGZ(NatZ:GNZTyp;Vorzeichen_positiv:boolean): GGZTyp;
//Wandelt eine GNZ-Zahl in eine GGZ.
function GGZtoGNZ(Zahl:GGZTyp):GNZTyp;
//schneidet das Vorzeichen ab und gibt eine GNZ zurück.
function GGZadd(a,b:GGZTyp):GGZTyp;
//Gibt die Summe a + b zurueck.
function GGZsub(Minuent,Subtrahend:GGZTyp):GGZTyp;
// Rechnet Minuend-Subtrahend.
function GGZmul(a,b:GGZTyp):GGZTyp;
//Gibt das Produkt a*b zurueck.
function GGZmulword(a:dword;b:GGZTyp):GGZTyp;
// Wie GGZmul, nur ist a vom Typ dword
function GGZakleinerb(a,b:GGZTyp):boolean; inline;
// Prueft, ob a kleiner ist als b
function GGZagleichb(a,b:GGZTyp):boolean; inline;
// Prueft, ob sich a und b gleichen.
function GGZdiv(Divident, Divisor:GGZTyp):GGZTyp;
//dividiert Divident durch Divisor und gibt das Ergebnis zurueck
function GGZmod(Divident, Divisor:GGZTyp):GGZTyp;
//Gibt Divident mod Divisor zurueck
function GGZistgerade(zahl:GGZTyp):boolean; inline;
//Prueft, ob zahl mod 2 = 0
1018403188188111241473327790049056819374171287458066325110414569683
7124189161711984272884348651335847261443444275649905562839583004732
3549072317112368671754351361393425631187333448712634399571658198707
9949228100933774960721707770417974898090797578147319435850611145774
7945052613334208162647468947319257246914069777082660172096599627566
1435480949039912340023718736596494628257019128042533338157955137787
1163174901831120931491114041716511064972446847591319754880627720262
8482027304233273150871793911899680700857331825479302705388164456464
635323735211573881344703555741679
^ ( potenz )
2964882407392307851332923206234880919373556372533612561062281245348
4169110960380384960826410972342485824886199341383837048860241018889
3792631654979092643715448924957905471001256939451842829864798262060
9958485464578608079846124545374736619569296133987166556897523468457
1143180355837490982790357078237176518260289646352525921943996124801
8690729736870879758610131514036239031137084258834607977471660498849
8255700302636793031304894132442468019100280080974435917248519120005
8419353022794620124728059792976524921321179049752326500312564164289
694174637445047028458199328463553
MOD
6013997149289886484491301977584039255762598169503138003692084875331
9116667909242910086169381520239045140742116754781557535145334470973
5728003964983704828521085864528534726422663169715522740379026907068
2735944546517203216359019050297509879777007710223258101715634840807
8235477874327110807120309275353868419425694704664152842136499249894
1026209464115274491360653550958043943351638795234358041833659030857
0274562291826229076591408400617491691037235847262918522499396379670
0459226436023773677185954297308912761892467364285181970482656162106
133463348196991684245467051288867
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast