作者H45 (!H45)
看板ask-why
标题Re: [请益] 乱数表有没有规律??
时间Wed May 20 11:43:12 2009
※ 引述《HuangJC (吹笛牧童)》之铭言:
: : 回到你的问题,0x00~0xFF 扩展至 0x0000~0xFFFF 是非 onto 的对映关系
: 这个 onto 我不会翻译..
: : 也就是说,有些对应域的数值不会被定义域的数值对映到。
: : 如果你早就知道这一点的话,下一个问题是「会不会有某一区特别偏重」
: : → H45:以乱数在二维平面上随机取点却绘出一条直线的机率也太低了吧 05/20 05:16
: : 推 HuangJC:因为没有很均匀呀.. 05/20 10:33
: int r=random(); // 0x00~0xFF
: //欲扩扩至 0x0000~0xFFFF,从前的精典做法是用乘法扩展
: //而我用过的 basic 指令是从浮点数开始的
: double R=r/256.0; // 0.0~1.0
: int result=R*65536; //0x0000~0xFFFF
: 事实上 result 只会有 256 种变化,也许这就是你说的 非onto
: 把这 256 种变化撒在绘图平面上,就变出 256 条直线了
: 当然直线只是隐隐约约,但眼睛看得出来
: 一个很简单的方法是直接移位扩展
: int r=random()<<8|random(); //0x0000~0xFFFF
: 但我不清楚前8位元如果和後8位元间形成某种数学关系
: (因为想要均匀,且没引入任何外部种子,所以我只好用虚拟乱数)
: 会不会出现的乱数冒出很巧的规律
: 比如,第 0,2,4,6 偶数次的乱数是外部引入(键盘点击时间)乱数好了
: 而第 1,3,5,7 奇数次的乱数是前一次直接乘2(溢位丢弃) XD
: 是的,我故意用了可观察的逻辑,但的确造出很惨的效果
: r=0x0000;
: r=0x0102;
: r=0x0204;
: r=0x0408; //比如这个,前面04时,後面就只可能 08,不可能有其他值
我直接和你说结论:虚拟乱数不是这样做的。
一个看似很乱的乱数,必须做很大的质数运算
为了计算量的效率,通常会只取最小的几个位数来运算。
以你的例子而言好了,想要从 0x00 ~ 0xFF 扩展到 0x0000 ~ 0xFFFF
为了符合乱数的大质数运算原则,最好连续取 2 次乱数
再将这两个乱数排在一起即可。
举例而言:第一次取的乱数是 0x01, 第二次取的乱数是 0x02
那麽此次得到的乱数扩展到 0x0000 ~ 0xFFFF 就是 0x0102
如果你真的懂乱数产生法的话
应该知道第二次取的乱数是从第一次取完乱数之後的种子做大质数运算而得的吧。
: 点击键盘和取样频率间的关系也类似这样
: 虽然我点击键盘的速度有无限种可能 (限制在 0~1秒间,但速度仍有无限多种)
: 但我的取样频率只有 10次/1秒 ,那取回的乱数值就只有 10种
: 虽然你主张频率本身也会受杂讯干扰
: 但总之我的读值只有 1~10
: 杂讯并不会进入我的读值,这就是数位化呀~
: 另一种讲法是我读回的是秒数,所以 10次/1秒 可读回的点是
: 0.1,0.2,0.3~~~ 1.0 这样好了,但读值不是 0.1秒
: 因为杂讯使 clock 飘移,可能读回 0.11秒 或 0.09秒
: 这其实是有两组不同的频率才做得到
: 一个做 wait ,一个去读秒,所以才能读到 0.11 or 0.09
: 不然再怎麽漂我也不会读到小数下两位
: 而即使如此,杂讯也不会太大,不足以把读值打散到均匀
: 我们将会看到绘出的直线在 0.1 的附近抖动(总共有十条直线)
: 这怎麽办?还是不能用的
: 事实上我可以用前面谈的移位扩展来做(这次谈十进制)
: random() spec : 1~10 ,刚才说键盘乱数只有这样的辨识度
: int R=(random()-1)*10+(random()-1); //这样扩展成 0~99 了
: 好像蛮理想的 XD
: 不过同一个人打字有相似的均匀度
: 会不会连续取样时都落在 0.3~0.7 之间
: 而 0.1 一直没出现呢?
: 一直没出现我还是不能用啊,结果是要把统计及权重搬出来
: 帮我把乱数拉散变成平均分布吗?
: (读到 0.3 变 0.1,读到 0.7 变 1.0;而且不是线性扩展)
: 总之,一个来源不均匀的东西,还要用一堆数学式去搓它
: 搓不好在绘图时就看到一条一条有序的线
: 就说杂讯好了,在 EMI 实验室也会看到不像杂讯的杂讯
: 一般解释当然是环境噪音
: 不过环境噪音在反射的过程中可能会特别出现整数倍的共鸣
: (好像有辆车的喇叭发出 Do,结果高八度低八度的 Do 同时都共鸣了)
: 一般我们测的 IC 如果在某频率有杂讯
: 那麽整数倍的频率也可以观察一下是不是也有杂讯
: 更别说全天下都在流行某频率时 (比如 GSM 双频手机,你带进来不就专搞这双频?)
: 一起开机..一起来,变得很规律 *_*
: 结果杂讯就好像海浪,它不是均匀的
: 它是一波一波的,还会涨潮退潮 XD
: 你说海浪的成因很复杂吗?受全世界所有生物泡澡排泄的影响
: 但你明明看到它的拍打还蛮有频率的不是?
: 我看这堆杂讯还是有共鸣的 *_*
我只回一句话,看能不能了解:
巨观下,看似一切平静;微观下,却非常混乱。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 HuangJC:如果巨观起伏的值可以取出直流成份予以滤除,我可以承认这 05/20 20:27
2F:→ HuangJC:个乱数够均匀;但取直流成份的公式,还是有赖数学家.. 05/20 20:28