Hallo,
ich habe mal das Programm geändert und einfach ein Testfeld mit Zahlen gleichen Abstandes gefüllt habe ( sehr großer Abstand) und anschließend in diesem diese Feld zufällige Werte um 1 oder mehr vergrößert habe.
Dies mehrfach hintereinander.
Versuch[i]= verändertere(Versuch[i-1])
Es war mir nicht geheuer, immer nur die gleiche Datei mit sich selbst zu vergleichen, da werden keine Daten bewegt.
Hier mal die Messungen mit 16 Feldern mit 1e7 = 10 Mio Werten.
Temp ist das Ausgangs und Intersectfeld
Einmal Intersect(Temp,versuch[i]) mit i von 0..15
und einmal rückwärts
Intersect(Temp,versuch[i]) mit i von 15..0
type
tData = int64;
Als Ergbenis:
Code:
Messung
#19, Pascal
9999999 9375981 8790215 8240652 7725057 7242124 6788731 6363882
5967006 5594037 5244659 4916458 4608947 4321049 4050708 3796820
3796820 3796820 3796820 3796820 3796820 3796820 3796820 3796820
3796820 3796820 3796820 3796820 3796820 3796820 3796820 3796820
Zeit in ms : 4606
#39, Pascal
10000000 9375981 8790215 8240652 7725057 7242124 6788731 6363882
5967006 5594037 5244659 4916458 4608947 4321049 4050708 3796820
3796820 3796820 3796820 3796820 3796820 3796820 3796820 3796820
3796820 3796820 3796820 3796820 3796820 3796820 3796820 3796820
Zeit in ms : 3829
#45, Pascal
10000000 9375981 8790215 8240652 7725057 7242124 6788731 6363882
5967006 5594037 5244658 4916456 4608944 4321045 4050703 3796814
3796820 3796819 3796818 3796817 3796816 3796815 3796814 3796813
3796812 3796811 3796810 3796809 3796808 3796807 3796806 3796805
Zeit in ms : 2971
#35, Assembler
10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000
10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000
10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000
10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000
Zeit in ms : 993
Fertig.
Version #19 verzählt an der höchsten Stelle
Version #39 funktioniert
Version #45 verkleinert scheinbar das intersect um 1 zuviel ( aber nicht immer, besonders auffällig bei rueckwaerts.
Mit tdata = longint, war es richtig
)
Version #35 funktioniert überhaupt nicht ( kann eigentlich nur bei tData= 32bit funktionieren, oder? Aber vielleicht übergibt freepascal die Register anders)
Version #45 War in der ursprünglichen Verson mit tdata = longint schneller als die Assembler Version 70 / 80 ms
Gruß Horst