您的位置:首页 > 其它

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

2016-10-13 18:03 225 查看
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);
}

}
实现两种随机数的算法 解决了溢出问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: