refactor number into a seperate type
allow higher precision numbers

see #20