hello! why Nim shows different behavior on int overflow? var prod: uint64 = 1 echo "Product numbers 1-25:" for num2 in 1'u64 .. 25'u64 : prod = prod * num2 echo prod Run
returns Product numbers 1-25: 7034535277573963776 Run when var prod: uint64 = 1 echo "Product numbers 1-100:" for num2 in 1'u64 .. 100'u64 : prod = prod * num2 echo prod Run returns Product numbers 1-100: 0 Run when signed var prod: int64 = 1 echo "Product numbers 1-100:" for num2 in 1'i64 .. 100'i64 : prod = prod * num2 echo prod Run got runtime fail Product numbers 1-100: fatal.nim(53) sysFatal Error: unhandled exception: over- or underflow [OverflowDefect] Run real value (erlang) fact(N) -> fact(N, 1). fact(0, A) -> A; fact(N, A) when N > 0 -> fact(N - 1, N * A). Run > test1:fact(25). 15511210043330985984000000 Run so different behavior O_o why not just return 0 in all cases? thank you