On 4/6/10 11:56 AM, Roman Rakus wrote:
> On 04/06/2010 05:32 PM, John Reiser wrote:
>>>>> Program received signal SIGFPE, Arithmetic exception.
>>>>> 0x0000000000462cd5 in exp2 () at expr.c:761
>>>>> 761 val1 /= val2;
>>>>> (gdb) print val1
>>>>> $1 = -9223372036854775808
>>>>> (gdb) print val2
>>>>> $2 = -1
>>>>>
>>>>> which is strange.
>>
>>>> Not at all. Overflow invokes undefined behaviour.
>>
>>> But why there is no overflow on 32bit system?
>>
>> No *detected* overflow.  For instance, if computing (2 ** 63)
>> gives 0 (the low-order 32 bits of the true result) and
>> does not detect the overflow (or ignores the overflow,
>> either by intention or by bug), then there is no problem
>> with computing (0 / -1).
>>
> Thanks for clarifying my words.
> So, on 32bit systems, evaluation of (2 ** 63 / -1) gives the wrong number.

It shouldn't matter whether or not the system is 32-bit.  Bash performs
arithmetic on intmax_t values, which are 64 bits on all Linux systems I
have available, at least.  I'm not sure whether the compiler or libc has
greater responsibility for manipulating 64-bit quantities.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/


Reply via email to