This package is a part of Tongyuan's product. This repo is an archived version of it for the purpose of JuliaCN 2022 talk "Why I still recommend Julia -- composability and generic programming". This package provides a live example on how Julia beats MATLAB's C code by 1000x faster. The case is special, but the spirit that drives its design are common in Julia.
This package provides a core integer type GF
(aka GFNumber
) to represent numbers in the
galois field.
The main constructor is GF{M}
, where M
represents the number of bits(capacity). For instance,
numbers in field GF{3}
is between GF{3}(0)
and GF{3}(2^3 - 1)
.
julia> typemin(GF{3}), typemax(GF{3})
(GF3(0), GF3(7))
julia> x = GF{3}(3) # is equivalent to GF3(3)
GF{3}(3)
julia> capacity(x), ppoly(x), eltype(x)
(3, GF3(11), UInt64)
The full constructor version is GF{M,P,T<:Unsigned}(x)
, where M
represents the field capacity, P
is the chosen prime polynomial for this galois field (default value is the smallest one), and
T
is the raw data type. These information can be extracted using capacity
, ppoly
and eltype
, respectively.
For convenience, some alias are made for commonly used valid M
value -- from GF1
to GF16
. The
difference between GF3
and GF{3}
is that GF3
is a concrete type with P=11
and T=UInt
,
while GF{3}
is a partially constructed type (neither concrete or abstract). For instance,
julia> x = GF3[1, 2, 3] # equivalent to GF{3,11,UInt}[1, 2, 3]
3-element Vector{GF3}:
1
2
3
julia> x = GF{3}[1, 2, 3]
3-element Vector{GFNumber{3}}:
GF3(1)
GF3(2)
GF3(3)