<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">NetSpirit via fpc-devel <<a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>> schrieb am Fr., 30. Juli 2021, 15:37:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This code gives distinct results when compiled for Win32 and Win64<br>
- Win32: 49744125<br>
- Win64: 49744124.9999999<br>
<br>
procedure Test;<br>
var<br>
  D: Double;<br>
begin<br>
  D := 3 * (exp(3 * ln(255)));<br>
  WriteLn('Result: ' + FloatToStr(D));<br>
end;<br>
<br>
<br>
Somewhere is precision loss (or extra rounding). Is this good?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">On Win64 (and any non-x86 system) the intermediary results are calculated with Double precision while on any other x86 target it's calculated with Extended precision before being converted to Double for the assignment to D. So yes, that is as expected. </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>