Julia 1.0.0解析函数溢出错误似乎很奇怪

时间:2018-10-19 01:25:44

标签: julia

我可能缺少一个简单的答案,但我看不到以下原因:

# Everything works as expected for 2^18
julia> 2^18
262144
julia> 2^18 < typemax(Int64)
true
julia> parse(Int64, bitstring(2^18))
1000000000000000000

# However, 2^19 seems to cause trouble with the parse function.    
julia> 2^19
524288
julia> 2^19 < typemax(Int64)
true
julia> parse(Int64, bitstring(2^19))
ERROR: OverflowError: overflow parsing "0000000000000000000000000000000000000000000010000000000000000000"

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

parse默认将给定的字符串解析为以10为底的整数。因此,您的第一个parse给出10 ^ 18而不是2 ^ 18。因为10^18 < typemax(Int64)为真,所以没有溢出。但是,10 ^ 19大于Int64类型的最大值。因此自然会溢出。

如果您想要的行为是将字符串解析为二进制数,则在函数调用中添加base = 2关键字参数。

parse(Int64, bitstring(2^19), base=2)
>>> 524288

否则,如果要将其解析为以10为底的数字,请尝试使用BigIntInt128而不是Int64以避免溢出。