Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

Math overflow

 [1/5] from: atruter:labyrinth:au at: 6-Jul-2003 18:19


I vaguely remember this coming up before, but can anyone explain why the first expression fails and the second succeeds:
>> 2133147400 + 26604769
** Math Error: Math or number overflow ** Near: 2133147400 + 26604769
>> 9999999999 + 99999999
== 10099999998 Regards, Ashley

 [2/5] from: roland::hadinger::arcor::de at: 6-Jul-2003 13:57


You're using different types:
>> type? 2133147400 ; < 2 ** 31
== integer!
>> type? 9999999999 ; >= 2 ** 31
== decimal!
>> type? 9999999999 + 99999999
== decimal! Adding integer values produces an integer overflow if the result can't be represented as a 32 bit signed integer. Adding decimal values does not overflow unless the result exceeds +/-1.79769313486231e308. Adding a decimal and an integer value promotes the integer to a decimal first, then the decimal result is calculated.

 [3/5] from: joel:neely:fedex at: 6-Jul-2003 7:15


Hi, Ashley, It's all in the types. Ashley Truter wrote:
> I vaguely remember this coming up before, but can anyone explain > why the first expression fails and the second succeeds:
<<quoted lines omitted: 3>>
>>> 9999999999 + 99999999 > == 10099999998
Take a look at this:
>> type? 2133147400
== integer!
>> type? 26604769
== integer! versus this:
>> type? 9999999999
== decimal!
>> type? 99999999
== integer! The behavior of the addition operator changes based on the type of the left-hand argument. The first case attempts to use integer addition and overflows the valid range for integer values. The second case uses floating-point addition, as the left-hand value (silently) is viewed as floating-point, and therefore does *not* overflow the floating-point range. -jn-

 [4/5] from: antonr:iinet:au at: 7-Jul-2003 0:44


Your first example starts with a small enough number to be an integer! so it overflows when the integer limit is reached. The second is bigger, so it starts out life as a decimal! and you haven't added enough to overflow a decimal so it's ok. Anton.

 [5/5] from: tomc:darkwing:uoregon at: 8-Jul-2003 8:35


I am sure others have explained aleready but here are some hints
>> type? 2133147400
== integer!
>> type? 9999999999
== decimal! and
>> 99999999999999 + 999999999999
== 100999999999998
>> 99999999999999 + 999999999999.4
== 100999999999998 On Sun, 6 Jul 2003, Ashley Truter wrote:

Notes
  • Quoted lines have been omitted from some messages.
    View the message alone to see the lines that have been omitted