RosettaCodeData/Task/Integer-overflow/Crystal/integer-overflow.cr
2026-04-30 12:34:36 -04:00

38 lines
1 KiB
Crystal

macro try (expr)
printf "%-*s # => ", padding, {{expr.stringify}}
begin
puts {{expr}}
rescue ex
puts "Exception: #{ex.message}"
end
end
padding = 25
puts "Result does not fit into a 32-bit signed integer:"
try -(-2147483647-1)
try 2000000000 + 2000000000
try -2147483647 - 2147483647
try 46341 * 46341
try (-2147483647-1) // -1
padding = 52
puts "\nResult does not fit into a 64-bit signed integer:"
try -(-9223372036854775807 - 1)
try 5000000000000000000 + 5000000000000000000
try -9223372036854775807 - 9223372036854775807
try 3037000500 * 3037000500
try (-9223372036854775807 - 1) // -1
padding = 32
puts "\nResult does not fit into a 32-bit unsigned integer:"
try -4294967295.to_u32
try 3000000000_u32 + 3000000000_u32
try 2147483647_u32 - 4294967295_u32
try 65537_u32 * 65537_u32
padding = 52
puts "\nResult that does not fit into a 64-bit unsigned integer:"
try -18446744073709551615_i128.to_u64
try 10000000000000000000_u64 + 10000000000000000000_u64
try 9223372036854775807_u64 - 18446744073709551615_u64
try 4294967296_u64 * 4294967296_64