欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

随机的效 劳务派遣管理系统 果很棒

点击: 次  来源:宝鼎软件 时间:2017-09-30

原文出处: KAAAsS

其实写这篇文章的原由是最近筹备在Java上写一个Perlin噪声的插件,所以对各类噪声函数有了一丢丢的相识,若有问题还请各人指正。转载的话但愿能注明出处。

留意,本教程中的随机函数均是形参为整形,返回值为区间[0,1)内的单精浮点数的函数。测试均为1~10000的随机数生成速度测试(1D – 输入x、2D – 输入x, y)。

更新记录

2016.1.22 – 初稿。

2016.1.28

(1) – 更新了Wichman-Hill随机数的算法,修改内容。增加了几个随机算法。

(2) – 统计出了各个要领较量后的分数。

随秘密领

1.Wichman-Hill 随机数发生器

Excel的随机函数曾用的要领,劳务派遣管理系统,参考文献:

  • Wichman, B.A. 和 I.D. Hill,Algorithm AS 183:An Efficient and Portable Pseudo-Random Number Generator,《Applied Statistics》,31,188-190,1982。
  • Wichman, B.A. 和 I.D. Hill,Building a Random-Number Generator,BYTE,第127-128 页,1987 年 3 月。
  • Rotz, W. 和 E. Falk,D. Wood 和 J. Mulrow,A Comparison of Random Number Generators Used in Business,颁发于 2001 年在佐治亚州亚特兰大市进行的“统计学连系集会会议”上。
  • 直接上源码(2D请前去Github上查察):

    /**
     * This is a method of Wichman-Hill random number generator.
     * 
     * @param x
     * A seed for generator.
     * @return A float random value between [0.0,1.0)
     */
    public static float randomWH(java.lang.Integer x) {
       int[] seed = new int[3];
       seed[0] = (171 * x) % 30269;
       seed[1] = (172 * (30000 – x)) % 30307;
       seed[2] = (170 * x) % 30323;
       return (x / Math.abs(x)) 
               * (seed[0] / 30269.0F + seed[1] / 30307.0F + seed[2] / 30323.0F) % 1.0F; 
    }

    以下是测试功效:

    Start testing randomWH(), test: Generate 10000 numbers(1D).
    Testing randomWH() completed, using time: 10 ms.

    Start testing randomWH(), test: Generate 10000 numbers(2D).
    Testing randomWH() completed, using time: 7 ms.

    还蛮乐观,可是图像就…

    随机的效 劳务调派打点系统 果很棒

    无论怎么改,照旧泛起了线性的趋势,颠簸很小……Orz

    2.RSA 随机数发生器

    RSA公钥算法各人都不会不熟悉吧,公认很靠谱的密钥算法。这里就是用了RSA的随机算法。参考:

  • Wikipedia – RSA problem
  • 其公式:C = (x * exp P) mod N(P是质数,N是两个质数之积)

    这是Java代码:

    /**
     * This is a method of RSA.
     * 
     * @param x
     *            A seed for generator.
     * @return A float random value between [0.0,1.0)
     */
    public static float randomRSA(java.lang.Integer x) {
    	return (float) (x * Math.exp(seedRSA[0]) % seedRSA[1] / seedRSA[1]);
    }

    测试功效:

    Start testing randomRSA(), test: Generate 10000 numbers(1D).
    Testing randomRSA() completed, using time: 10 ms.

    Start testing randomRSA(), test: Generate 10000 numbers(2D).
    Testing randomRSA() completed, using time: 9 ms.

    随机的效 劳务调派打点系统 果很棒

    从图像看出,软件开发,这个算法的随机性很赞。何况运算速度也不赖,适合利用。

    3.Java 随机数发生器

    Java自带的随机数(就是java.util.Random类),用过的都知道吧。那就直接上代码:

    /**
     * This is a method of Java random number generator.
     * 
     * @param x
     *            A seed for generator.
     * @return A float random value between [0.0,1.0)
     */
    public static float randomJava(java.lang.Integer x) {
    	return (float) (new java.util.Random(1000 * x).nextDouble()); //乘1000来让种子间差距增大
    }

    这是测试数据:

    Start testing randomJava(), test: Generate 10000 numbers(1D).
    Testing randomJava() completed, using time: 11 ms.

    Start testing randomJava(), test: Generate 10000 numbers(2D).
    Testing randomJava() completed, using time: 8 ms.

    随机的效 劳务调派打点系统 果很棒

    很是优秀的随机数算法,速度快并且根基看不出纪律。

    4.简朴的随机数发生器

    又是扫荡Google的战利品,软件开发,很歉仄健忘出处惹……代码:

    /**
     * This is a method of basic random generator.
     * 
     * @param x
     *            A seed for generator.
     * @return A float random value between [0.0,1.0)
     */
    public static float randomBasic(java.lang.Integer x) {
    	x = (x << 13) ^ x;
    	return (float) Math
    		.abs((1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0));
    }

    测试功效:

    Start testing randomBasic(), test: Generate 10000 numbers(1D).
    Testing randomBasic() completed, using time: 9 ms.