NiceNumbers.jl
The nicest numbers in Julia
This package implements a number type to represent numbers you can safely give to your students to work with.
The goal is that when common linear algebra or numerical algorithms work using NiceNumber
s that then one can be sure that the algorithm can be reasonably easy worked through by hand with the given numbers.
Nice numbers as implemented in this package consist of a rational part and a square root part with a rational coefficient. Thus every NiceNumber
is specified using two Rational{Int}
s and one Int
.
Installation
Just add the package from the Julia Pkg mode:
(@v1.4) pkg> add NiceNumbers
Usage Example
julia> using NiceNumbers
julia> n = NiceNumber(2,3,5)
Nice number:
2+3⋅√5
julia> n^2
Nice number:
49+12⋅√5
julia> m = NiceNumber(3//5)
Nice number:
3//5
julia> n+m, n-m, n*m, n/m
(13//5+3⋅√5, 7//5+3⋅√5, 6//5+9//5⋅√5, 10//3+5⋅√5)
julia> sqrt(m)
Nice number:
1//5⋅√15
julia> sqrt(n)
ERROR: sqrt(2+3⋅√5) is not nice anymore!
[...]
There is also a macro to simplify working with nice numbers:
julia> using LinearAlgebra
julia> n = norm([4,12,3] * √2)
18.38477631085024
julia> @nice m = norm([4,12,3] * √2)
Nice number:
13⋅√2
julia> n == m
true
For further examples see the examples section of the documentation, especially the Example: SVD.