mschnell hat geschrieben:Ich erweitere gleich 'mal die "Add" und "Sub" ASM-Prozeduren zu Funktionen, die den Carry vom obersten Wort der Langzahl als Funktionswert zurückgeben. Dann kann Der Pascal-Teil damit entsprechend verfahren.
Ok, danke. Werde die neuen Routinen gleich in den Code einfügen.
Es ist aber nicht unbedingt eine gute Idee bei einer längeren Rechnung mit Langzahlen variabler Länge zu arbeiten. Darüber hatten wir schon gesprochen.
In jedem Fall sollte es eine Variante der (Pascal) "Add" und "Sub"-Funktionen geben, die nicht das Ergebnis zwingend ein Wort größer als die Summenden macht, oder dynamisch (also mit Umkopieren) das Ergebnis je nach Wert verlängert oder verkürzt.
Wir hatten letztens darüber diskutiert, dass ein Array länger zu machen wesentlich umständlicher ist als es kürzer zu machen, da es u.U. beim Verlängern an einen anderen Speicherort kopiert werden muss.
Folglich werde ich bei der Addition das Ergebnis-Array um 1 zu lang einrichten (dauert selbe Zeit) und nachträglich um 1 verkürzen (geht schnell, da nix umkopiert werden muss), sollte es nicht zum Überschlag kommen. Dann dürften die zeitlichen Verluste minimal sein.
Auch die Arithmethik-Unit, auf die dein obiger Link verweist, verwendet dynamische Arrays, wenn ich das richtig durchschaut habe.
Benutzt Deine Langzahlen zu Dezimal-String Funktion die GNZ-Arithmetik-Funktionen ?
Ja, benutzt sie. Das muss aber garnicht schneller sein, da deine eben gepostete Umwandlungsroutine auf sehr schnelle Befehle zugreift.
Noch eine Bemerkung zum Konzept der GNURZ: Hatte sie ursprünglich so programmiert, dass sie sehr ausfallsicher, wenig fehleranfällig und leicht zu warten ist (defensive Programmierung). Ich bin mir sicher, dass durch die Integration deiner ASM-Multiplikation ein _ganz erheblicher_ Geschwindigkeitsvorteil rausgeholt werden kann, nicht nur weil so die Fähigkeiten des Prozessors ideal ausgenutzt werden können, sonder auch weil dessen Struktur auch eine effiziente Optimierung das Karazuba-Algorithmus erlaubt. Ich schätze, dass sich die Geschwindigkeit mindestens verfünffacht. Benchmarkergebnisse werden hier gepostet, sobald ich die Optimierungen abgeschlossen habe.
Viele Grüße, Euklid