明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: tcsl9621

LISP调用DLL文件生成随机数

    [复制链接]
发表于 2007-1-23 12:27 | 显示全部楼层

別一個亂碼函數

;;; Random number generator
(defun RAN_LAI ()
  (setq SEED_LAI (if SEED_LAI
     (rem (+ (* SEED_LAI 15625.7) 0.21137152) 1)
     (- (getvar "cdate") (fix (getvar "cdate")))
   )
  )
)

发表于 2007-2-9 13:53 | 显示全部楼层
(defun rnd ( / temp )
(setq temp (rtos (getvar "cdate") 2 8))
(atoi (substr 15 2))
)
发表于 2007-2-9 13:55 | 显示全部楼层
(defun rnd ( / temp )
(atoi (substr (rtos (getvar "cdate") 2 8) 16 1))
)
发表于 2007-2-9 14:44 | 显示全部楼层

就大家讨论的结果看来,随机数的产生依赖于下面两种情况:

1、线性同余式,

如果线性同余式的几个参数设置不好,会对程序产生不良影响。《计算机编程艺术》中已经谈到了这个问题,---但这已经超出我们讨论的范围。

2、计算机时钟或CPU频率,但这样只能精确到小数点6位,因而对于小范围内的随机是可行的,但是对于大范围内的必然有限制。

不知道可有更好的解决方法?

发表于 2007-11-2 22:02 | 显示全部楼层
快好用
发表于 2011-8-29 13:29 | 显示全部楼层
顶了。好东西。收收下。
发表于 2011-8-29 13:47 | 显示全部楼层
学习学习
发表于 2012-7-16 11:42 | 显示全部楼层
学习了...谢谢..慢慢学
发表于 2012-11-29 07:59 | 显示全部楼层
慢慢向老大们学习。
发表于 2013-1-2 21:08 | 显示全部楼层
本帖最后由 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));按初始精度格式化
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 17:14 , Processed in 0.773477 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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