Re: [RFC] decimal float point patch based on libdecnumber: testcase

Wu Zhou
2006-06-22T23:27:36Z

Hi Daniel,

Thanks for the review. See below for my response.

On Thu, 22 Jun 2006, Daniel Jacobowitz wrote:

> Hi Wu,
>
> By and large this looks very good. There are a couple of minor
> formatting issues, which I'll run through for you when I get a chance
> if no one else does; it may not be until after the GCC Summit next
> week, though.

I will go through the patches to see if I find the formatting issues
myself. If anybody can help point them out, that will be appreciated.

> Moving libdecnumber into src is a bit tricky. I'll take care of that
> when we're ready for the patch. It also has to go into src-release,
> CVSROOT/modules, and some dependencies in Makefile.def. So don't worry
> about that.

Thanks. I won't bother to think about that then.

>
> I did have one question for you. This struck me as strange...
>
> On Thu, Jun 22, 2006 at 05:03:34AM +0800, Wu Zhou wrote:
> > + # _Decimal64 constants, which can support up to 16 digits
> > + gdb_test "p 1.2dd" " = 1.2"
> > + gdb_test "p -1.2dd" " = -1.2"
> > + gdb_test "p 1.234567890123456dd" " = 1.234567890123456"
> > + gdb_test "p -1.234567890123456dd" " = -1.234567890123456"
> > + gdb_test "p 1234567890123456.dd" " = 1234567890123456"
> > + gdb_test "p -1234567890123456.dd" " = -1234567890123456"
> > +
> > + gdb_test "p 1.2E1dd" " = 12"
> > + gdb_test "p 1.2E10dd" " = 1.2E\\+10"
>
> If "p 1234567890123456.dd" prints it back with digits, why does "p
> 1.2E10dd" print it back with an exponent? Which would
> "p 1200000000000000.dd" do?

That is because they have different precision/exponent. Number
1234567890123456.dd have 16 digits, its coefficient is 1234567890123456,
and exponent is 0, so it won't print back with an exponent. While in the
case of "1.2E10dd", the coefficient is 12, exponent is 9, so it will print
back with an exponent. And in exponent display mode, the coefficient will
be normalized, in this case, to 1.2; and exponent get to 10 respectively.

For "p 1200000000000000.dd", it will return 1200000000000000. It is
equal to but different than 1.2E+15. Their precison is not the same.

> > +proc test_arithmetic_expressions {} {
> > +
> > +# Arithmetic operations for DFP types are not yet implemented in GDB.
> > +
> > +}
>
> Might want some tests for whatever does happen if you try it, in the
> meantime. It should give a sensible error message.

Using my patched gdb, addition and multiple will return the following
error message:

(gdb) p 1.2df + 1.3df
Argument to arithmetic operation not a number or boolean.
(gdb) p 1.2df * 1.3df
Argument to arithmetic operation not a number or boolean.

Do you mean that we need to output something more close to the fact. to
say, "Addition/Multiple of decimal floating point is not supported right
now". or something other like this. If you want, I can do that.

Regards
- Wu Zhou