works, but loses precision due to underflow