[CLN-list] Operations with different precisions
Bruno Haible
bruno at clisp.org
Mon Oct 12 23:54:21 CEST 2009
Sebastian Macke wrote:
[Please keep cln-list in CC. If you write to me privately, the probability that
you get a response is less than 0.3.]
> I used your library with a template class.
> template <class T>
> Here I define one and zero as
> T(1.)
> T(0.)
Please read again the essential, central chapter "Ordinary number types"
of the CLN documentation.
From it, it follows that
- Numbers such as 1.0 or 0.0 are floating-points and thus are approximate.
- If you want a "one" and "zero" in a ring, you should take exact numbers,
(cl_I)1 or (cl_I)0.
- You don't need templates, because the cl_F, cl_R, cl_N types already
comprise 'float' and 'double' (and longer) precisions.
> This works without problem with float, double and long double
> But with your implementation I can lose precision.
In the previous mail I explained to you that when you combine two floating-
point numbers with different precision, the result will have an accuracy
that approximately equals the minimum of the two precisions. This is a
mathematical property of the definition of accuracy. (You can verify it
with interval arithmetic or with statistics, if you like.)
You then have the choice:
- Return a result with a precision approximately equal to its accuracy.
This is what CLN does. Or
- Return a result whose precision is the *maximum* of the two precisions.
If you do this, you are betraying the user of your program.
Bruno
More information about the CLN-list
mailing list