Ответ 1
Лучший способ сделать это - сделать ваши расчеты с максимальной степенью точности, необходимой для получения ожидаемых результатов в пределах указанного допуска. Это означает, что если вам нужно использовать двойники для выполнения вычислений и получения ожидаемых результатов с согласованностью, используйте их. Выясните, где меньше точности, и выполняйте только операции, требующие ее с поплавками. Помните, что вашему миру не нужно приближаться к гравитации земли для падающих предметов, вы можете упростить вещи и сделать гравитацию 10 вместо 9.81, сделать пиксели соответствующими четным единицам и т.д. Это также поможет, если вы определите свои константы в одинаковые единицы и избегать преобразования единиц измерения в математику (поскольку это приводит к дополнительным операциям), лучше добавить более конечные константы, которые имеют что-то вроде гравитации в см/с, м/с и км/ч, чем для того, чтобы иметь только один и перевести его тысячу раз. О, и стоимость литья int для плавания не очень высока, сравнивая умножение 2 поплавков, поэтому подумайте об этом.
Я также отмечу, что FPU становятся все более распространенными в современных телефонах Android, поэтому проблема использования математики с плавающей запятой становится немного менее важной (хотя и не полностью).
Другая вещь, которую я хочу отметить, - Double/Float/Integer vs. double/float/int. Первые требуют создания новых объектов для использования и не должны использоваться для математики (по возможности), тогда как последние являются примитивами и не приводят к созданию новых объектов, они менее дорогостоящие для создания.