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