Chet Ramey wrote:

Description:
         $   echo $((4000000000*4000000000)
     -2446744073709551616

Repeat-By:
    Do some arithmetic in bash $((....)).
    If the numbers are out of range, the output will be wrong in
        all sorts of interesting ways. No error message is given.

Fix:
        Arbitrary-precision maths would be nice. But at least, could we
    have an error message if an overflow occurs?

    The man page says:
        "Evaluation is done in fixed-width integers with no
                check for overflow..."
    but I'd suggest this represents a bug, not a feature.

I'm comfortable with the current behavior.  POSIX requires that expressions
be evaluated according to the C standard, and that standard leaves the
treatment of integer overflow as undefined.


If POSIX says the behaviour is undefined, then surely bash can do whatever it wants. So, printing an error message would be allowed.

The error message would be:

 a)Most helpful to the user (least surprise)

 b)Consistent with other cases, where bash does give warnings. For example:

$ X=$((3+078))
bash: 3+078: value too great for base (error token is "078")
$ echo $?
1


Regards,

Richard











_______________________________________________
Bug-bash mailing list
Bug-bash@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-bash

Reply via email to