本帖最后由 bibiye 于 2013-11-15 18:37:24 编辑

解决方案 »

  1.   

    1.rnd是函数,同时也是object,so,添加seed和today属性是米有问题的。在JS中,函数是一等公民。2.真的不知道!真的不知道,为什么不用Math.random?难道这个rnd,比Math.random更高效更随机?function rand(number) {
      return Math.ceil(Math.random()*number); 
    }; 
      

  2.   

    rnd.today=new Date(); 
        rnd.seed=rnd.today.getTime(); 
    这个获取当前时间的时间戳,这个对每一台电脑来说,都是唯一的。rnd.seed = (rnd.seed*9301+49297) % 233280; 
    这个是用来求余数的,至于为何加这几个数字,还真是不知道,感觉随便加些数字都可以吧。
    这个最好获取的结果,就是一个大于等于1,小于233280的数字rnd.seed/(233280.0),这个就是把前面获取的数字,变成0-1之间的数字,仿效Math.random()的返回结果,Math.random()虽然也是返回随机数,不过,有可能重复,使得随机数不唯一,用时间戳来确定,就会大大缩小这个可能性。至少,对一台电脑,时间戳肯定是唯一的。
      

  3.   

    我不赞同哦~~Math.random内部具体如何实现随机的暂且不去考究,既然作为语言的基础API提供给大家用,就是内部保证了一定的随机性。
    Math.random()虽然也是返回随机数,不过,有可能重复,使得随机数不唯一。
    这句话可不是那么轻易就可以得出的,如上的求余法也不见得就随机了,时间戳是唯一,时间戳求余就不能保证唯一了,还有seed只是在第一次取时间的,以后每次调用rnd只是加一个数求余而已,所以“用时间戳来确定,就会大大缩小这个可能性”也是不成立的。况且随机数为什么非得保证唯一性?
      

  4.   

    我不赞同哦~~Math.random内部具体如何实现随机的暂且不去考究,既然作为语言的基础API提供给大家用,就是内部保证了一定的随机性。
    Math.random()虽然也是返回随机数,不过,有可能重复,使得随机数不唯一。
    这句话可不是那么轻易就可以得出的,如上的求余法也不见得就随机了,时间戳是唯一,时间戳求余就不能保证唯一了,还有seed只是在第一次取时间的,以后每次调用rnd只是加一个数求余而已,所以“用时间戳来确定,就会大大缩小这个可能性”也是不成立的。况且随机数为什么非得保证唯一性?仔细的想了一下,你说的是对了,这样看来,这段代码,确实是没啥用的。
      

  5.   

    这个就是一个 随机数生成的代码js本身提供的是封装好的Math.random()哪个代码自己实现了随机的逻辑(至于他的生成随机数的依据原理一下子看不出来)
      

  6.   

    非常感谢各位的热心回答~我有网上搜索了一下RND,js参考手册也没找到这个函数~
    不知能帮忙找个链接吗?谢谢
      

  7.   


    楼主,rnd是咱们自己定义的函数,不是内置函数,函数可以看成高级语言的类,类有方法和属性,seed和today就是rnd自己定义的属性,你也可以换成别的,建议读读《javascript面向对象编程》了解一下js中面向对象的概念原理