Julia 整数类型的最大值

问题描述 投票:0回答:1

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 中是否有一种有效的方法来引发异常?
这是为了防止这种情况在没有引起注意的情况下发生。

也许有比抛出异常更好的解决方案。

types integer julia boundary
1个回答
3
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.