求一个角度的正弦函数,我们一般会想到Math类,其实还有一个类也可以实现这个我们的需求StrictMath
Math.sin(30.0d);
StrictMath.sin(30.0d);
通过两个方法都可以得到相同的结果
查看源代码 这两个实现方法有什么不一样呢?
StrictMath源代码
public static native double sin(double a);
sin方式是个本地方法,是靠底层代码实现
再来看看Math的sin方法
public static double sin(double a) {
return StrictMath.sin(a); // default impl. delegates to StrictMath
}
通过源代码可以清晰的看到,其实Math类实现sin方法就是通过调用StrictMath类的native方法.
引用一段
Unlike some of the numeric functions of class StrictMath, all implementations of the equivalent functions of class Math are not defined to return the bit-for-bit same results. This relaxation permits better-performing implementations where strict reproducibility is not required.
By default many of the Math functions simply delegate to the equivalent functions in StrictMath for their implementations. Code generators are encouraged to use platform-specific native libraries or microprocessor instructions, where available, to provide higher-performance implementations of Math functions. Such higher-performance implementations still must conform to the specification for Math.
By default many of the Math functions simply delegate to the equivalent functions in StrictMath for their implementations. Code generators are encouraged to use platform-specific native libraries or microprocessor instructions, where available, to provide higher-performance implementations of Math functions. Such higher-performance implementations still must conform to the specification for Math.