Мне было интересно, почему Math.sin(double) делегировать на StrictMath.sin(double), когда я нашел проблему в Reddit thread. Вышеупомянутый фрагмент кода выглядит следующим образом (JDK 7u25):
Math.java:
public static double sin(double a) {
return StrictMath.sin(a); // default impl. delegates to StrictMath
}
StrictMath.java:
public static native double sin(double a);
Вторая декларация native, которая для меня разумна. В документе Math говорится, что:
Генераторам кода рекомендуется использовать собственные библиотеки на основе платформы или инструкции микропроцессора, где доступно (...)
И вопрос: не является ли родной библиотекой, которая достаточно подходит для платформы StrictMath? Что еще может знать JIT о платформе, чем установленная JRE (пожалуйста, сосредоточьтесь только на этом случае)? В словах, почему не Math.sin() native уже?