Julia
Integer
类型具有最小和最大 value。
当计算超出这些界限时,结果是“不正确的”。
for i in Int8[5, 10, 15, 20]
println(i, " -> ", i^2)
end
结果:
5 -> 25
10 -> 100
15 -> -31
20 -> -112
发生这种情况时,Julia 中是否有一种有效的方法来引发异常?
这是为了防止这种情况在没有引起注意的情况下发生。
也许有比抛出异常更好的解决方案。
Julia 通常不会在整数溢出时出错,因为这会导致更快的代码执行(这就是算术在 CPU 级别上的工作方式)
然而,您可以使用
@saferintegers
宏来控制溢出。
julia> using SaferIntegers
julia> @saferintegers begin
x = Int8(19)
y = x * x
end
ERROR: OverflowError: 19 * 19 overflowed for type Int8
在循环的情况下,您需要使用
Safe*
类型之一:
julia> for i in SafeInt8[5, 10, 15, 20]
println(i, " -> ", i*i)
end
5 -> 25
10 -> 100
ERROR: OverflowError: 15 * 15 overflowed for type Int8
第二个选项(可能不太方便):
julia> ⨰ = Base.Checked.checked_mul;
julia> Int8(9) ⨰ Int8(9)
81
julia> Int8(19) ⨰ Int8(19)
ERROR: OverflowError: 19 * 19 overflowed for type Int8