Chinaunix
标题:
请教一个生成随机数的函数
[打印本页]
作者:
czw1413_cn
时间:
2007-07-18 09:09
提示:
作者被禁止或删除 内容自动屏蔽
作者:
ivhb
时间:
2007-07-18 09:27
如果不保存中间结果,基本很难实现随机数。
你可以参考
unsigned long int next = 1;
/* rand: return pseudo-random integer on 0..32767 */
int rand(void)
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
/* srand: set seed for rand() */
void srand(unsigned int seed)
{
next = seed;
}
复制代码
这个算法改成SP版本的还是很容易的。只要你每次保存next
作者:
wenlq
时间:
2007-07-18 12:14
http://www.iiug.org/resources/faq/ifaq04c.htm.1#4.8.8
作者:
ivhb
时间:
2007-07-18 13:55
wenlq :
那个faq我很有兴趣,但是我没有办法完整的下载,你能告诉我一个可以下载的地方么?
你给的URL上,有个ftp下载该faq的地址,但是那个地址好像不可用。
作者:
wenlq
时间:
2007-07-18 15:03
以前下的一个
ifaq20051116.zip
2007-07-18 15:03 上传
点击文件名下载附件
377.46 KB, 下载次数: 294
作者:
ivhb
时间:
2007-07-18 15:34
thx a lot
作者:
czw1413_cn
时间:
2007-07-22 11:15
提示:
作者被禁止或删除 内容自动屏蔽
作者:
ivhb
时间:
2007-07-24 12:29
CREATE PROCEDURE sp_setseed(n INTEGER)
DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1;
LET seed = n;
END PROCEDURE;
CREATE PROCEDURE sp_random(n integer) RETURNING INTEGER;
DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1;
DEFINE d DECIMAL(20,0);
LET d = (seed * 1103515245) + 12345;
-- MOD function does not handle 20-digit values... Dammit!!
LET seed = d - 4294967296 * TRUNC(d / 4294967296);
--- is this ok ???
RETURN MOD(TRUNC(seed / 65536), n);
END PROCEDURE;
dbaccess dbname <<EOF
select sp_random(9) from systables
;
EOF
复制代码
[
本帖最后由 ivhb 于 2007-7-24 14:56 编辑
]
作者:
czw1413_cn
时间:
2007-07-24 18:39
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2