Jonas Maebe wrote:

On 06 Apr 2007, at 21:36, Colin Western wrote:

Can I ask what determines the precision of floating point calculations are done in? It seems that fpc treats (for example, with J declared as integer)

1/sqrt(J+1.0) as single

but

1/sqrt(J+1) as double

In 2.1.2 and 2.2, both will be evaluated as single (except on 80x87, because it is not possible to tell the 80x87 to perform a particular calculation using only single/double precision).

The current SVN (which is the only one I am using at the moment) does give the results at different precisions as shown for x86_64 and PPC - I don't know if that should be considered as a bug. (I understand that the older 386 architecture will normally use double or extended all the time).

Having said that, for numerical programming if double is wanted, the evaluation as double in the absence of specific precision information is actually desirable, and avoids some hard to find errors. Values like Sqrt(2) are common, which I should presumably write as Sqrt(Double(2)) to be sure I don't loose precision. It came up because my application (which requires double rather than single accuracy) was giving slightly different results for different architectures. I have now gone through and fixed the differences I can find, and the results are now the same, but it is difficult to be sure I have caught all the problem areas.

Is there some way of optionally making double the default for constants (rather than single) as a way of avoiding these errors?

Colin
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to