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

Reply via email to