Ich habe jetzt den Test auch auf die Single-Versionen der unit ausgeweitet und bin auf einen
seltsamen Fehler gestoßen.
Ich vermute es handelt sich tatsächlich um einen
Fehler im Compiler.
Und zwar schlagen Vergleiche mittels "=" auf die Konstante
MaxSingle in der Unit
Math fehl,
weil der Compiler MaxSingle vor dem Vergleich in ein Double umwandelt und dann den Vergleich ausführt.
Darauf gekommen bin ich, weil die überladenen Funktion mit dem Parameter-Satz Double aufgerufen wird, wenn MaxSingle als direkter Parameter verwendet wird.
Man muss also immer MaxSingle vor der Benutzung auf einen Single casten
statt MyFunc(MaxSingle) also immer MyFunc(Single(MaxSingle));
Code: Alles auswählen
var
singlevalue : Single;
begin
singlevalue := MaxSingle;
equal := (singlevalue = MaxSingle);
// equal bekommt den Wert False zugewiesen
equal := (singlevalue = Single(MaxSingle));
// equal bekommt den Wert True zugewiesen
end;
Ich habe die Unit unextfloat.pas angepasst (dabei einen unnötigen if-Zweig entfernt) und das ganze Testprogramm entsprechend erweitert und angepasst.
ZIP mit allem anbei.
Gruß Ekkehard