Ich würde
BenBe da recht geben, dass dwords besser geeignet sind. Ich habe mich damals auch für die dwords entschieden. Dies hatte mehrere Gründe. Ohne jetzt deine Leistung schmählern zu wollen aber vielleicht interessierts dich ja:
1. Bei extended verschenkst du Speicherplatz, da bei jedem extended in deinem Feld ein Vorzeichen und noch einen Exponenten mitspeicherst. Das ist gleichzeitig ein Geschwindigkeitsverlust denn du brauchst für jeden extended drei Speicherzugriffe (10 byte) obwohl du darin nur 64 bit signifikante Stellen hast also eigentlich 2 Speicherzugriffe nur bräuchtest. Also da Addition von dwords 1 Takt braucht, dürftest du so ungefähr durch diese Designentscheidung fast 30% Performance einbüßen. Desweiteren kann es sein, dass der Coprozessor hierfür auch länger braucht, als die integerpipeline. Da der ja intern noch die Exponenten "normalisieren" muss und ja nicht ahnen kannst, dass du die Fließkommaeinheit für Ganzzahlen benutzt/missbrauchst.
2. Überläufe sind in der Integerpipeline einfach per Flag abrufbar und können dann über den assemblerbefehl adc mit überlauf direkt weiterverarbeitet werden, das spart das if in der innersten Schleife und damit auch erheblich Zeit da dann ja häufig gesprungen wird. Ich gebe zu dass ist dann x86 speziefisch aber das schränkt für die meisten den Einsatzbereich nicht ein. Selbst wenn man adc nicht verwenden mag dann dürfte das setzen der Flags aus der fpu ebenfalls nochmal länger dauern als diese dierekt abzufragen in der integerpipeline.
Das zum Grundsätzlichen. Allerdings sind in deiner Unit noch zusätzliche unnötige Beschränkungen.
Einerseits könnte man indem man das extendedfeld als packed deklariert wenigstens alle zwei extended einen Speicherzugriff sparen weil der dritte dann wenigstens schon im Cache ist.
In der Addition und, wahrscheinlich auch woanders, erzeugst du einen Überlauf bei T, das du meiner meinung nach willkürlich auf 100... setzt. Der Computer rechnet binär und ein extended kann ganze Zahlen bis 2^64 oder (2^64)-1 ohne Rundung darstellen, weiß jetzt gerade nicht genau. Jedenfalls beschränkst du durch das Heruntersetzen dieses Limits den Wertebereich eines einzelnen extendeds und musst infolgedessen im gleichen Verhältnis längere Arrays of extended verwenden um gleich große Zahlen zu erreichen. Hier gilt dann wieder das gleiche Argument wie oben, dass mehr Speicherzugriffe auch gleichzeitig (bei Addition vermute ich fast linearen Zusammenhang) mehr Geschwindigkeit kostet.