This code gives distinct results when compiled for Win32 and Win64 - Win32: 49744125 - Win64: 49744124.9999999 procedure Test; var D: Double; begin D := 3 * (exp(3 * ln(255))); WriteLn('Result: ' + FloatToStr(D)); end; Somewhere is precision loss (or extra rounding). Is this good?