В последнем обновлении Android API FloatMath
отмечен следующим предупреждением lint-warning:
В старых версиях Android, используя android.util.FloatMath, был рекомендуется по соображениям производительности при работе с поплавками. Однако, на современных аппаратных удвоениях так же быстро, как и плавающие (хотя они и принимают больше памяти), а в последних версиях Android FloatMath на самом деле медленнее, чем использование java.lang.Math из-за того, как JIT оптимизирует java.lang.Math. Следовательно, вы должны использовать Math вместо FloatMath, если вы ориентируетесь только на Froyo и выше.
Здесь также упоминается что double и float равны по скорости на новейшем оборудовании.
Я использую некоторую тригонометрическую математику в приложении, в котором я сейчас работаю (целевой Froyo и выше), но высокая точность не нужна, поэтому я использовал float и FloatMath
до сих пор, и нет никакой необходимости перейти к удвоению.
Однако рекомендация "use Math
over FloatMath
" не говорит, какой из них следует использовать, если float является желаемым результатом.
Итак, короче говоря; какой из них предпочтительнее?
float foo = FloatMath.sin(bar);
или
float foo = (float) Math.sin(bar);
С одной стороны, у меня есть только Froyo-устройство, поэтому я не могу выполнить собственный бенчмаркинг самостоятельно.
Начиная с уровня API 22 класс FloatMath устарел в пользу обычного Math-класса.