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

Julia 1.0.0解析函数溢出错误似乎很奇怪,julia,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 funct

也许有一个简单的答案我没有找到,但我不认为有以下原因:

# 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"
#在2^18中,一切正常
朱莉娅>2^18
262144
julia>2^18解析(Int64,位字符串(2^18))
1000000000000000000
#但是,2^19似乎会给parse函数带来麻烦。
朱莉娅>2^19
524288
julia>2^19解析(Int64,位字符串(2^19))
错误:溢出错误:溢出分析“0000000000000000000000000000000000000000000000000000000000000000000000000”

有什么建议吗?

parse
默认情况下,将给定字符串解析为以10为基数的整数。因此,您的第一次
解析
得到的是10^18,而不是2^18。没有溢出,因为
10^18
为true。但是,10^19大于Int64类型的最大值。所以它自然会溢出

如果您希望将字符串解析为二进制数,则将
base=2
关键字参数添加到函数调用中

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

否则,如果要将其解析为基数为10的数字,请尝试
BigInt
Int128
而不是
Int64
,以避免溢出

哇,这是一个很好的答案。谢谢检查
2^18
是否有用。即使溢出,检查仍为真。