龙龙仔 发表于 2007-1-23 12:27:00

<p>別一個亂碼函數</p><p>;;; Random number generator<br/>(defun RAN_LAI ()<br/>&nbsp; (setq&nbsp;SEED_LAI (if SEED_LAI<br/>&nbsp;&nbsp;&nbsp;&nbsp; (rem (+ (* SEED_LAI 15625.7) 0.21137152) 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (- (getvar "cdate") (fix (getvar "cdate")))<br/>&nbsp;&nbsp; )<br/>&nbsp; )<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));按初始精度格式化
)
页: 1 2 [3] 4
查看完整版本: LISP调用DLL文件生成随机数