(...) Bis ich das gefixt hatte, hatte ich auch immer diverse undefinierbare Probleme (...)
Delphi-Quellcode:
{Convert from extended to Fix32}
function FloatToFix32 (floater: extended): TW_FIX32;
var
fracpart : extended;
begin
Result.Whole := trunc(floater);
fracpart := floater - result.Whole;
fracpart := abs(fracpart);
Result.Frac := trunc(fracpart*$10000);
end;
{Convert from twain Fix32 to extended}
function Fix32ToFloat(Value: TW_FIX32): Extended;
function Sign(x: extended): extended;
begin
if x < 0 then result := -1 else result := +1
end;
begin
Result := Value.Whole + Sign(Value.Whole) * (Value.Frac / $10000);
end;
Ist es so besser? Ich hatte den Eindruck, dass bei der ursprünglichen Implementierung aus -1.2 (-1,+0.2) wurde, was dann zu -0.8 rekonstruiert wurde. Was hatte es mit der Whileschleife und dem *10 auf sich?