В последнем обновлении Android API элемент FloatMath
помечен следующим предупреждением:
В старых версиях Android использование android.util.FloatMath рекомендовалось из соображений производительности при работе с числами с плавающей запятой. Однако на современном оборудовании удвоения выполняются так же быстро, как и float (хотя они занимают больше памяти), а в последних версиях Android FloatMath на самом деле медленнее, чем использование java.lang.Math, из-за того, как JIT оптимизирует java.lang.Math. . Поэтому вам следует использовать Math вместо FloatMath, если вы ориентируетесь только на Froyo и выше.
Также упоминается здесь, что double и float равны по скорости на новейшем оборудовании.
Я использую некоторую тригонометрическую математику в приложении, над которым сейчас работаю (нацелено на Froyo и выше), но высокая точность не требуется, поэтому до сих пор я использовал числа с плавающей запятой и FloatMath
, и нет никакой необходимости переключаться на удвоения.
Однако рекомендация "использовать Math
вместо FloatMath
" не говорит, какой из них следует использовать, если желаемым результатом является число с плавающей запятой.
Итак, короче; какой из них предпочтительнее?
float foo = FloatMath.sin(bar);
or
float foo = (float) Math.sin(bar);
Кстати, у меня есть только Froyo-устройство, поэтому я не могу провести надлежащий бенчмаркинг самостоятельно.
На уровне API 22 класс FloatMath объявлен устаревшим в пользу обычного класса Math.
int
/float
/double
с очень большой долей скептицизма.float
может быть немного быстрее просто из-за меньшего объема кэш-памяти, а на iPhone 3GSfloat
значительно быстрее, так как он может использовать модуль NEON вместо более медленного модуля VFP (модуль NEON не поддерживает удваивается); это может быть специфично для iDevice. Кроме того, автоматическая векторизация JIT автоматически принесетfloat
больше преимуществ, чемdouble
, просто потому, что она может поместить больше из них в каждый векторный регистр. - person tc.   schedule 29.03.2013FloatMath
– Этот класс устарел на уровне API 22.< /b> Вместо этого используйтеMath
.. - person Pang   schedule 04.06.2015