Julia 有理数型

Julia 有理数型

有理数无理数相对,也是实数集合的子集,可以简单地认为是分子与分母均为整数的分数。

在Julia中直接提供了这种数值的表达方式,其原型为:

Rational{T <: Integer} <: Real

其中,Rational是有理数的类型名;Integer是Julia中定义的抽象类型,用于限定分子与分母都必须是上文中Int8、Int16等具体整数类型的一种;Real是抽象类型,表达的是Rational同浮点型、无理数型一样,都是实数的一种。

Rational类型是Julia中特有的,以“分子//分母”格式表达。其中双斜线并非是运算符,而是表达有理数结构的特定操作符。例如:

julia> 2//3                    # 分子与分母都是Int64类型
2//3

julia> typeof(ans)
Rational{Int64}

julia> Int8(2)//Int32(7)     # 分子是Int8类型,而分母是Int32类型
2//7

julia> typeof(ans)
Rational{Int32}               # 类型被统一为Int32

可见,分子与分母为不同整型时,Julia会通过必要的隐式转换,将两者的类型进行统一。而且创建的Rational数值在Julia内部会被约分为标准形式,确保分母不为负数,例如:

julia> UInt32(2)//Int8(10)
0x00000001//0x00000005

julia> 5//25                  # 被约分
1//5

julia> 1//-2                  # 负号被放于分子上
-1//2

julia> -2//4
-1//2

如此一来,数学意义上相等的有理数,在语言内部的表达便是唯一的。

由于对无穷值的支持,所以在Rational对象中允许分母为0,但不允许分子和分母同时为0,例如:
Julia 有理数型

其中,前两个除零有理数定义成功,且都被约分为同一形式;但后一个因为分子和分母都为0,所以创建失败。

显然,如果分子或分母中任意一个为浮点值,创建Rational数值对象也会失败,例如:
Julia 有理数型

因为Rational的声明中限定了分子、分母的类型必须是整型的一种。

当然,Rational类型的有理数值均可转换到浮点值,例如:

julia> Float64(3//2)
1.5

julia> Float64(-4//-12)
0.3333333333333333

julia> Float64(5//0)
Inf                       # 分母为0的正有理数,对应正无穷

julia> Float64(-3//0)
-Inf                      # 分母为0的负有理数,对应负无穷

同时,浮点值也能够转换到Rational数值,例如:
Julia 有理数型

其中,为何0.33333333333333转换的结果不是1//3而是由一大串数字构成的Rational类型对象,有兴趣的读者可以研究下。

如果要获得Rational对象的分子、分母部分,可以分别通过numerator()denominator()函数实现,例如:

julia> numerator(2//3)
2
julia> denominator(2//3)
3

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!