明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1894|回复: 6

[讨论]lisp生成随机数(扑克洗牌法)

[复制链接]
发表于 2008-1-19 13:33 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-1-19 16:40:34 编辑

我使用系统时间来计算随机数

但是出现的问题是连续取的时候

两次取得系统时间几乎相同

不知道大侠们有没有其他获得随机数的办法?

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2008-1-19 13:46 | 显示全部楼层

我的CAD版本里面取不到CPUTICKS系统变量.太残忍了

 楼主| 发表于 2008-1-19 15:42 | 显示全部楼层
本帖最后由 作者 于 2008-1-19 15:43:06 编辑

我需要取从0到i    (i=0,1,2....9)以内的数

当i=0 则结果=0

i=1,2,3时 结果=随机数除以(i+1)取余数

i>3时 随机循环取然后判断 随机数小于等于i时结束(用上面的方法导致概率不平均)

但是这样的循环效率还是很低(循环时系统时间获取值相同 要等一会才能循环出下一个值)

不知道在i>3的时候怎样能够公平的获取随机数?

 楼主| 发表于 2008-1-19 16:40 | 显示全部楼层

我想到扑克牌洗牌是打乱顺序的一种方法

一个表(长度由需要选取的数目大小决定)

(0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 .......)进行洗牌方式的排序

新表是旧表取第一个 最后一个 第二个 倒数第二个  .....

(0 9 1 8 2 7 .......)

每次洗牌后再抽掉随机的一个表元素 (随机值由getvar date获得)

再洗牌

几次之后取其中的一个数或对表进行计算 应该能连续获得随机的数吧?

 楼主| 发表于 2008-1-19 16:45 | 显示全部楼层

真正的扑克洗牌

并不是规律性的穿插

每次洗牌的过程都不一样

如果能对简单的(0 1 2 3 4 5 6 7 8 9)这个表进行

非规律性的洗牌

就能连续获得随机数

不知各位大侠有什么好办法?

发表于 2008-1-19 18:56 | 显示全部楼层
本帖最后由 作者 于 2008-1-19 19:04:23 编辑

我的方法是

1.将数据进行 rem exp log 等函数进行处理...

2.与 (cadr (grread T))  进行数学运算

3.转成ascii 进行运算

发表于 2008-1-19 23:56 | 显示全部楼层
vba的 rnd
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-14 00:33 , Processed in 0.163545 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表