AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Gesucht: Int128 Integer Arithmetik (Assembler/Delphi)
Thema durchsuchen
Ansicht
Themen-Optionen

Gesucht: Int128 Integer Arithmetik (Assembler/Delphi)

Ein Thema von sundance · begonnen am 20. Feb 2015 · letzter Beitrag vom 20. Feb 2015
Antwort Antwort
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#1

Gesucht: Int128 Integer Arithmetik (Assembler/Delphi)

  Alt 20. Feb 2015, 08:16
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: Type TInt128 = packed array[0..3] of LongWord (litte-endian format, MSB=Vorzeichen-Bit)



Vielen Dank im Voraus
.sundance.

Geändert von sundance (20. Feb 2015 um 08:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NicoDE
NicoDE

Registriert seit: 16. Jul 2012
Ort: Darmstadt
26 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 20. Feb 2015, 09:30
[...] 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
Nico Bendlin
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#3

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

  Alt 20. Feb 2015, 09:58
Hab ich mich mal vor ein paar Jahren dran versucht. (Siehe Anhang)
Angehängte Dateien
Dateityp: zip I128.zip (14,6 KB, 51x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#4

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

  Alt 20. Feb 2015, 10:42
... 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)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#5

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

  Alt 20. Feb 2015, 11:19
... 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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

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

  Alt 20. Feb 2015, 12:12
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 20. Feb 2015, 12:26
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...

Geändert von sundance (20. Feb 2015 um 13:16 Uhr)
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#8

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

  Alt 20. Feb 2015, 14:10
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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