Bei mir läuft der bei deinen Angaben schon direkt in eine Endlosschleife, weil M irgendwann 0 ist:
Delphi-Quellcode:
M := ((SampleCount + 1) div 2);
while M < J do
begin
J := J - M;
M := M div 2;
end;
J := J + M;
Da in der zweiten Schleife le1 immer größer wird
Delphi-Quellcode:
le := trunc(Power(2, L));
le1 := le div 2;
und dann irgendwann
Delphi-Quellcode:
ip := Q + (le1 - 1);
// mit
while Q <= (SampleCount + 1)
do
auf außerhalb des arrays Zugegriffen wird
Delphi-Quellcode:
tr := FR[
ip] * ur - FI[
ip] * ui;
// FLOAT_INVALID_OPERATION nur 64Bit
ti := FR[
ip] * ui + FI[
ip] * ur;
kann nur murks bei rumkommen. Das wird auch unter 32Bit keine korrekten Ergebnisse liefern, sondern nur zufällig laufen, je nachdem was gerade auf dem Heap ist.
Bau mal ein:
Delphi-Quellcode:
ip := Q + (le1 - 1);
if ip > High(fi)
then
raise Exception.Create('
Fehler');
if ip > High(FR)
then
raise Exception.Create('
Fehler');
tr := FR[
ip] * ur - FI[
ip] * ui;
// FLOAT_INVALID_OPERATION nur 64Bit
ti := FR[
ip] * ui + FI[
ip] * ur;
ein