Ich nehme an, Du benutzt Double-Fließkomma. Welche FPC-Version, 32- oder 64-Bit? Bei meiner
DAMath-Bibliothek habe ich festgestellt, daß einige FPC-Math-Routinen unbrauchbar sind (ln1xp etc),
exp verliert bis zu 13 bit. Dies gilt für Versionen <= 2.6.4. Bei den Development-Versionen 3.0.1 und 3.1.1 gibt es einige Verbesserungen.
Ich würde als erstes mal die neuen Versionen versuchen, falls Du es nicht bereits so machst. Falls das nichts hilft, die verdächtigen Funktionen (sin, cos, exp etc) isolieren und durch DAMath-Funktionen ersetzen.
Edit: Ein weiteres Problem sind Divisionen von Fließkomma-Konstanten durch Integer wie zB
Delphi-Quellcode:
{
Win64>FB.exe
3.33333343267441E-001 2.98023223876953E-008
Win32>FB.exe
3.33333333333333E-001 -5.55111512312578E-017
}
var
d: double;
n: integer;
begin
n := 3;
d := 1.0/n;
writeln(d:30, n*d - 1.0:30);
end.
Hier rechnen alle 64-Bit-Win-FPCs bis 3.1.1 in
single precision!!?? mit entsprechender Ungenauigkeit, habe versucht das als Bug zu reporten, ist aber als Feature abgelehnt, weil 1.0 halt exakt als Single darstellbar ist.