Math源码解析

本文主要解析Java中的Math类,重点讨论其日常使用频繁的功能,如 StrictMath 类的底层实现。由于部分实现无法直接查看,建议在实际需求中按需查阅JDK。同时,提到了Math类的random()方法,该方法用于生成0到1之间的double类型随机数。
摘要由CSDN通过智能技术生成

里面用到的StrictMath类绝大数都是底层实现的,目前还看不到实现方式,下面就贴出可以看出实现方式的功能

public final class Math{
   
	private Math() {
   }
	public static final double E = 2.7182818284590452354;
	public static final double PI = 3.14159265358979323846;
	//以度为单位的角度转换为用弧度表示的近似相等的角度
	public static double toRadians(double angdeg) {
   
        return angdeg / 180.0 * PI;
    }
    //转换关系跟上面相反
	public static double toDegrees(double angrad) {
   
        return angrad * 180.0 / PI;
    }
    //取整
    //规则:当X为正数时,第一步先X+0.5,然后取整
    //	   当X为负数时,第一步先X+0.5,第二步观察得到的结果的小数点左边的数为多少,并判断+0.5后得到的数大于0还是小于0,小于0则最后的取整的结果为-(小数点左边的数+1),大于0则取整结果为小数点左边的数
	public static int round(float a) {
   
        int intBits = Float.floatToRawIntBits(a);
        int biasedExp = (intBits & FloatConsts.EXP_BIT_MASK)
                >> (FloatConsts.SIGNIFICAND_WIDTH - 1);
        int shift = (FloatConsts.SIGNIFICAND_WIDTH - 2
                + FloatConsts.EXP_BIAS) - biasedExp;
        if ((shift & -32) == 0) {
    
            int r = ((intBits & FloatConsts.SIGNIF_BIT_MASK)
                    | (FloatConsts.SIGNIF_BIT_MASK + 1));
            if (intBits < 0) {
   
                r = -r;
            }
            return ((r >> shift) + 1) >> 1;
        } else {
   
            return (int) a;
        }
    }
    //功能跟上面一样
	public static long round(double a) {
   
        long longBits = Double.doubleToRawLongBits(a);
        long biasedExp = (longBits & DoubleConsts.EXP_BIT_MASK)
                >> (DoubleConsts.SIGNIFICAND_WIDTH - 1);
        long shift = (DoubleConsts.SIGNIFICAND_WIDTH - 2
                + DoubleConsts.EXP_BIAS) - biasedExp;
        if ((shift & -64) == 0) {
   
            long r = ((longBits & DoubleConsts.SIGNIF_BIT_MASK)
                    | (DoubleConsts.SIGNIF_BIT_MASK + 1));
            if (longBits < 0) {
   
                r 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值