Skip to content

fkastner/NiceNumbers.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NiceNumbers.jl

The nicest numbers in Julia

Stable Dev Build Status Coverage

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:

julia>] 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 SVD example.