Hi Community!

Suppose we have the following code:

a = 1
y = 0
t = false

while t == false
       y = a*((a+12)*(a+24)*(a+36)*(a+48))
       if mod(y,10^6) == 0
       println(a)
       println(y)
       t = true
       end
       a += 1
       end

And the output will be:

16140
-3379154992512000000

Actually it happens because we reached max positive Int64:

julia> typemax(Int64)
9223372036854775807

julia> typemax(Int64) + 1
-9223372036854775808

julia> bits(9223372036854775807)
"0111111111111111111111111111111111111111111111111111111111111111"

julia> bits(-9223372036854775808)
"1000000000000000000000000000000000000000000000000000000000000000"


OK! Lets use Int128!

julia> x = typemax(Int128)
170141183460469231731687303715884105727

julia> x::Int128 = a*((a+12)*(a+24)*(a+36)*(a+48))
-3037790465414534075

julia> Int128(a*((a+12)*(a+24)*(a+36)*(a+48)))
-3037790465414534075

julia> big(a*((a+12)*(a+24)*(a+36)*(a+48)))
-3037790465414534075

julia> BigInt(a*((a+12)*(a+24)*(a+36)*(a+48)))
-3037790465414534075

Not that we need, because `a` in a*((a+12)*(a+24)*(a+36)*(a+48)) has type 
Int64! After convert `a` to Int128 - all fine:

julia> a = convert(Int128,a)
16141

julia> typeof(a)
Int128

julia> a*((a+12)*(a+24)*(a+36)*(a+48))
1103766853957158562885

julia> while t == false
       y = a*((a+12)*(a+24)*(a+36)*(a+48))
       if mod(y,10^6) == 0
       println("a = $a")
       println("y = $y")
       t = true
       end
       a += 1
       end
a = 62452
y = 951844491850031104000000


OK! 

But, is it possible to get result in Int128 even if `a` has Int64 type? 

For example, anybody can has a lot of code and not wants explicit define 
type for a lot of variables for the good of single expression...

Andrey Stepnov

Reply via email to