Hallo,
ich hatte bei #45 übersehen, dass setlength garnicht genutzt wird, dann stimmt die assembler Version für 32 Bit Datentypen.
Delphi-Quellcode:
procedure _Intersect35ASM(var Left: TSampleArray; const Right: TSampleArray);
var
R: TSampleArray;
begin
R := Right;
setlength(Left,Intersect35ASM(Left, R, Length(Left)));
end;
Meine Funktionen, um ein Testfeld zu erzeugen und anschliessend immer mehr zu verfremden.
Delphi-Quellcode:
type
tData = longint;
TSampleArray =
Array of tData;
tVersuch =
array[0..15]
of TSampleArray;
const
// MAXDATCOUNT = 1000;
MAXDATCOUNT = 10*1000*1000;
delta = High(tData)
div MAXDATCOUNT-1;
procedure FillArray(
var A:TSampleArray);
//Fuellt A mit Werten von 0 bis MAXDATCOUNT*Delta
// im Abstand delta also, 0,delta,2*delta,3*delta...
var
i : integer;
d : tData;
begin
i := High(A);
d := delta * MAXDATCOUNT;
For i := i
downto 0
do
begin
d := d-delta;
A[i] := d;
end;
end;
procedure RandomiseArray(
out A:TSampleArray;
const B:TSampleArray;
Step :tData;
// mittlerer Abstand
diff :tData);
// Aenderungswert
// Veränderte zufällige Werte im durchschnittlichen Abstand Step
var
cnt: longInt;
i : longint;
begin
A := copy(B);
i := High(A);
cnt := 0;
repeat
inc(cnt);
inc(A[i],diff);
dec(i,random(2*Step-1)+1);
until (i< 0);
end;
..Im Hauptprogramm
...
setlength(TestFeld,MAXDATCOUNT);
FillArray(TestFeld);
Versuch[low(tVersuch)] := copy(TestFeld);
//Zufaellige Werte verändern
For i := low(tVersuch)+1
to High(tVersuch)
do
RandomiseArray(Versuch[i],Versuch[i-1],16,i);