自定义算法实现随机数的生成

package cn.itcast.shujujiegou.Random1;

/**
 * Created by likailong on 2016/10/13.
 */
public class Random1 {
    private static final int A=48271;
    private static final int M=2147483647;
    private static final int Q=M/A;
    private static final int R=M%A;
    private int state;
    public Random1(){
        state= (int) (System.currentTimeMillis()%Integer.MAX_VALUE);
    }
    public int randomInt(){
        int tmpState=A*(state%Q)-R*(state/Q);
        if(tmpState>=0)
            state=tmpState;
        else
            state=tmpState+M;
        return state;
    }
}

package cn.itcast.shujujiegou.Random1;

import com.sun.org.apache.regexp.internal.RE;

/**
 * Created by likailong on 2016/10/13.
 */
public class Random48 {
    private static final long A=25_214_903_917L;
    private static final long B=48;
    private static final long C=1L;
    private static final long M=(1L<<B);
    private static final long MASK=M-1;
    private long state;
    public Random48(){
        state=System.nanoTime()&MASK;
    }
    public int randomInt(){
        return next(32);
    }
    public double random0_1(){
        return ((long)next(26)<<27)+next(27)/(double)(1L<<53);
    }
    private int next(int bits) {
        if(bits<=0||bits>32)
            throw new IllegalArgumentException();
        state=(A*state+C)&MASK;
        return (int)state>>>(B-bits);
    }

}
实现两种随机数的算法 解决了溢出问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值