On 29-mar-10, at 00:04, Walter Bright wrote:
Don wrote:
(1) Converting a floating point literal into a double literal is
usually not lossless.
0.5f, 0.5, and 0.5L are all exactly the same number, since they are
exactly representable.
But 0.1 is not the same as 0.1L.
It depends. The D compiler internally stores all floating point
constants, regardless of type, in full 80 bit precision. Constant
folding and CTFE are all carried out in 80 bit precision regardless
of type. The only time it is actually truncated to the shorter
formats is when writing it out to the object file.
ok good that is actually how I though, so that cast(T)x is indeed the
way to write a generic float literal.
I thought that was the case, but seeing Don implying something
different I got worried that my coding was based on wrong assumptions.
The central idea is that more precision == better. If your floating
point algorithm breaks if precision increases, then the algorithm is
a bad one.
I fully agree.
The only time I've seen code that relied on roundoff errors is in
test suites that specifically tested for it.