I'm not sure if mine is perfectly accurate though, as it may lose floating point precision in some cases.