https://medium.com/codex/effective-java-avoid-float-and-double-if-exact-answers-are-required-fbdd9f8b9245