Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Gesucht: Int128 Integer Arithmetik (Assembler/Delphi) (https://www.delphipraxis.net/184020-gesucht-int128-integer-arithmetik-assembler-delphi.html)

sundance 20. Feb 2015 07:16

Gesucht: Int128 Integer Arithmetik (Assembler/Delphi)
 
Hallo zusammen,

ich bin auf der Suche nach einer Sammlung von Arithmetik-Routinen für 128-Bit Integer (vorerst nur Grundrechenarten und Shiftoperationen, vorzeichenbehaftet). Im Netz habe ich dazu einen interessanten Artikel (Inline Assembler in Delphi, 128-bit integer arithmetic) gefunden, der jedoch leider nur Ausschnitte eines Quelltextes zeigt. Gefunden habe ich den Text hier. Leider ist der Text wohl ziemlich alt, die angegebenen Links führen meist ins Leere und es ist kein Link auf den im Text erwähnten vollständigen Quelltext enthalten.

Kennt oder hat jemand zufällig den Quelltext dieser Delphi-Unit?
Oder vielleicht eine andere gute Int128-Bibliothek, am liebsten in x86-Assember/Delphi inline asm.
Ich habe auch schon einiges für Delphi gefunden; allerdings waren diese entweder nicht sehr performant (String-Repräsentation der Int128-Zahlen) oder definieren einen unnötig komplizierten Datentyp (z.B. mit zusätzlichem Flagbyte fürs Vorzeichen o.ä.).
Ich bin interessiert an einer generischen Darstellung wie:
Delphi-Quellcode:
Type TInt128 = packed array[0..3] of LongWord
(litte-endian format, MSB=Vorzeichen-Bit)



Vielen Dank im Voraus
.sundance.

NicoDE 20. Feb 2015 08:30

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
Zitat:

Zitat von sundance (Beitrag 1290676)
[...] am liebsten in x86-Assember/Delphi inline asm.

Kurz: Ich würde die Finger von Assembler lassen (außer einzelne Funktionen, die sehr große Datenmengen/-sätze bearbeiten).

Lang: Meines Wissens wird dadurch in Delphi erfolgreich die Optimierung verhindert; und das war wahrscheinlich die Idee hinter dem Wunsch Assembler zu verwenden. Wenn es Delphi sein soll/muss, sollte man es auch in Object Pascal schreiben. Delphi bietet seit einigen Versionen inline als Hinweis an den Compiler an. Meiner Erfahrung nach ist eher der Algorithmus in der Anwendung das eigentliche Performance-Problem und eine Optimierung 'ganz unten' bringt keine relevante Verbesserung. Die Assembler-Funktion müsste schon größere Datensätze beabeiten, um signifikate Vorteile zu bringen.

ps: fpc Int128Rec

Amateurprofi 20. Feb 2015 08:58

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ich mich mal vor ein paar Jahren dran versucht. (Siehe Anhang)

mensch72 20. Feb 2015 09:42

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
... I128.zip ...

Ist das für 32Bit oder 64Bit DelphiCompiler/ASM ?

(Wenn es pur um Speed geht, wäre es "Vorzeichenlos" implementiert&gerechnet am schnellsten)

Amateurprofi 20. Feb 2015 10:19

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
Zitat:

Zitat von mensch72 (Beitrag 1290701)
... I128.zip ...

Ist das für 32Bit oder 64Bit DelphiCompiler/ASM ?

(Wenn es pur um Speed geht, wäre es "Vorzeichenlos" implementiert&gerechnet am schnellsten)

Nur für 64Bit.

Zacherl 20. Feb 2015 11:12

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
Zitat:

Zitat von NicoDE (Beitrag 1290684)
Meines Wissens wird dadurch in Delphi erfolgreich die Optimierung verhindert

Die Optimierung in Delphi ist so oder so grottig. Das macht an dieser Stelle keinen Unterschied. Wenn man zudem auch unter 64 Bit compilen will, darf man kein inline Assembly verwenden, sondern muss die kompletten Funktionen in Assembler implementieren.

sundance 20. Feb 2015 11:26

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
Es geht hier auch nicht primär ums Optimieren auf die letzte Nanosekunde.
Bei einer Programmier-Aufgabe bin ich auf eine Int128-Darstellung gestoßen und wollte bei der Gelegenheit meine etwas angestaubten Assemblerkenntnisse etwas auffrischen.
Leider kann ich die x64-Routinen nicht direkt verwenden (Delphi 7, 32-bit; kann leider auch keine "class operators") - aber vielleicht läßt sich ja was ableiten, was man zur Implementierung von Multipikation/Division mit Int128 brauchen kann. Irgendwie muss sich ja eine 128x128 oder 64x64 Operation mit 32-bit-MULs machen lassen.


@Mod: Bitte den Thread-Titel korrigieren (Assembler/Delphi), damit die Suche danach funktioniert...

Mikkey 20. Feb 2015 13:10

AW: Gesucht: Int128 Integer Arithmetik (Assember/Delphi)
 
Zitat:

Zitat von sundance (Beitrag 1290724)
Irgendwie muss sich ja eine 128x128 oder 64x64 Operation mit 32-bit-MULs machen lassen.

Natürlich, eigentlich ist es wie schriftlich rechnen im 4294967296-er System:

Addieren 128Bit: ADD, ADC, ADC, ADC
Subtrahieren: SUB, SBB, SBB, SBB
Multiplizieren: Nach der Methode:
Code:
(a1+b1+c1+d1) * (a2+b2+c2+d2) = a1a2 + a1b2 + a1c2 + a1d2 + b1a2 + ... + d1d2
, wobei man die Stellenverschiebung berücksichtigen kann. Ergebnis ist dann ein 256-Bit-Integer.
Dividieren: Lässt sich ebenfalls wie das schriftliche Dividieren impklementieren.

Ich habe mir seinerzeit (in den 80-ern) so etwas für 32-Bit-Arithmetik gemacht. im Prinzip macht es keinen Unterschied zu jetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz