Gleiche Funktion in 32Bit und 64Bit
Delphi-Quellcode:
procedure TBassPlayer.XFFT(FR, FI:
array of single; Sign, Sample, SampleCount: Integer);
// Wave Daten glätten
var
Q, J, M, L, le, le1,
ip: integer;
tr, ti, s, ur, ur1, ui, wr, wi: single;
begin
J := 1;
for Q := Sample
to SampleCount
do
begin
if Q < J
then
begin
s := FR[Q];
FR[Q] := FR[J];
FR[J] := s;
s := FI[Q];
FI[Q] := FI[J];
FI[J] := s;
end;
M := ((SampleCount + 1)
div 2);
while M < J
do
begin
J := J - M;
M := M
div 2;
end;
J := J + M;
end;
for L := 1
to 8
do
begin
le := trunc(Power(2, L));
le1 := le
div 2;
ur := 1;
ui := 0;
wr := Cos(PI / le1);
wi := Sign * Sin(PI / le1);
for J := 1
to le1
do
begin
Q := J;
while Q <= (SampleCount + 1)
do
begin
ip := Q + (le1 - 1);
tr := FR[
ip] * ur - FI[
ip] * ui;
// FLOAT_INVALID_OPERATION nur 64Bit
ti := FR[
ip] * ui + FI[
ip] * ur;
FR[
ip] := FR[Q] - tr;
FI[
ip] := FI[Q] - ti;
// FLOAT_OVERFLOW nur 64Bit
FR[Q] := FR[Q] + tr;
FI[Q] := FI[Q] + ti;
Q := Q + le;
end;
ur1 := ur * wr - ui * wi;
ui := ur * wi + ui * wr;
ur := ur1;
end;
end;
for Q := Sample
to (SampleCount + 1)
do
begin
FR[Q] := FR[Q] * DivN;
FI[Q] := FI[Q] * DivN;
end;
end;
Dies Funktion Arbeitet unter 32Bit so wie sie soll.
In 64Bit muß ich beide Fehler ignorieren.
Dort bekomme ich diese beiden Fehler! FLOAT_INVALID_OPERATION, FLOAT_OVERFLOW
Wieder irgend so ein Ding mit Daten Typen?