Math与StrictMath的区别

Math与StrictMath的区别

求一个角度的正弦函数,我们一般会想到Math类,其实还有一个类也可以实现这个我们的需求StrictMath

[java] view plain copy
Math.sin(30.0d);  
StrictMath.sin(30.0d);  

通过两个方法都可以得到相同的结果
查看源代码 这两个实现方法有什么不一样呢?
StrictMath源代码

[java] view plain copy
public static native double sin(double a);  

sin方式是个本地方法,是靠底层代码实现
再来看看Math的sin方法

[java] view plain copy
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.

所以要实现Math中现有的基本算术运算方法都可以用StrictMath类中的方法来替换

math为strictMath的数值实现类。

但两者涉及到预测结果与运行速度的重要的对比上,见p43页Java核心技术卷一。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值