Rebol3 Code Examplex
Integer overflow
Demonstrate or detect arithmetic overflow in integer types.
Rebol [
title: "Rosetta code: Integer overflow"
file: %Integer_overflow.r3
url: https://rosettacode.org/wiki/Integer_overflow
]
foreach expr [
;; For 32-bit signed integers:
[negate (-2147483647 - 1) ]
[2000000000 + 2000000000 ]
[-2147483647 - 2147483647 ]
[46341 * 46341 ]
[(-2147483647 - 1) / -1 ]
;; For 64-bit signed integers:
[negate (-9223372036854775807 - 1) ]
[5000000000000000000 + 5000000000000000000 ]
[-9223372036854775807 - 9223372036854775807]
[3037000500 * 3037000500 ]
[(-9223372036854775807 - 1) / -1 ]
;; For 32-bit unsigned integers:
[-4294967295 ]
[3000000000 + 3000000000 ]
[2147483647 - 4294967295 ]
[65537 * 65537 ]
;; For 64-bit unsigned integers:
[transcode "-18446744073709551615" ]
[transcode " 10000000000000000000" ]
[transcode " 18446744073709551615" ]
[4294967296 * 4294967296 ]
][
prin [pad mold/only expr 44 ";== "]
print either error? res: try expr [as-red reform [res/type res/id]][res]
]