do calcs in bignum to ensure no loss of precision

Before I had used "round" in case the floating point calculations came out in
an unexpected way - instead, I have replaced these calculations with bignum
following Jeff's suggestion to ensure no loss of precision, thus making "round"
unnecessary.