龙龙仔
发表于 2007-1-23 12:27:00
<p>別一個亂碼函數</p><p>;;; Random number generator<br/>(defun RAN_LAI ()<br/> (setq SEED_LAI (if SEED_LAI<br/> (rem (+ (* SEED_LAI 15625.7) 0.21137152) 1)<br/> (- (getvar "cdate") (fix (getvar "cdate")))<br/> )<br/> )<br/>)</p>
asen
发表于 2007-2-9 13:53:00
(defun rnd ( / temp )<br/>(setq temp (rtos (getvar "cdate") 2 8))<br/>(atoi (substr 15 2))<br/>)
asen
发表于 2007-2-9 13:55:00
(defun rnd ( / temp )<br/>(atoi (substr (rtos (getvar "cdate") 2 8) 16 1))<br/>)
highflybir
发表于 2007-2-9 14:44:00
<p>就大家讨论的结果看来,随机数的产生依赖于下面两种情况:</p><p>1、线性同余式,</p><p>如果线性同余式的几个参数设置不好,会对程序产生不良影响。《计算机编程艺术》中已经谈到了这个问题,---但这已经超出我们讨论的范围。</p><p>2、计算机时钟或CPU频率,但这样只能精确到小数点6位,因而对于小范围内的随机是可行的,但是对于大范围内的必然有限制。</p><p>不知道可有更好的解决方法?</p>
jmp678
发表于 2007-11-2 22:02:00
快好用
w245272914
发表于 2011-8-29 13:29:16
顶了。好东西。收收下。
zhuangxu_521
发表于 2011-8-29 13:47:35
学习学习
xujinhua
发表于 2012-7-16 11:42:53
学习了...谢谢..慢慢学
smartstar
发表于 2012-11-29 07:59:38
慢慢向老大们学习。
cheng5276
发表于 2013-1-2 21:08:45
本帖最后由 cheng5276 于 2013-1-2 22:10 编辑
;本帖本意是LISP调用DLL的方法,既然有了这么多随机数,我也补一个吧,支持区间值
;;;============================================================
;;;返回值 :mi~ma之间的随机数
;;;============================================================
;jd-(int格式)保留的小数点位数,CPUTICKS方法精度不能大于9位,因为(expt 10 10)会出错,建议小于4位
(defun rnd (mi ma jd / n JD_BAK)
(setq jd_bak (if (<= jd 0) 3 jd))
(setq n (* (expt 10 (* -1.0 jd_bak)) (rem (getvar "CPUTICKS") (expt 10 jd_bak))))
(read (rtos (+ mi (* (- ma mi) n)) 2 jd));按初始精度格式化
)