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 NiceNumbers 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 NiceNumbersUsage 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
trueFor further examples see the examples section of the documentation, especially the Example: SVD.