ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
直接的方法是
    rand() % N      /* 不好 */
试图返回从 0 到 N - 1 的数字。但这个方法不好, 因为许多随机数 发生器的低位比特并随机, 参见问题 13.16。 一个较好的方法是:
    (int)((double)rand() / ((double)RAND_MAX + 1) * N)
如果你不希望使用浮点, 另一个方法是:
    rand() / (RAND_MAX / N + 1)
两种方法都需要知道 RAND_MAX, 而且假设 N 要远远小于 RAND_MAX。  RAND_MAX 在 ANSI 里 #define 在 <stdlib.h>。

顺便提一下, RAND_MAX 是个常数, 它告诉你 C 库函数 rand()  的固定范围。你不可以设 RAND_MAX 为其它的值, 也没有办法要求 rand()  返回其它范围的值。

如果你用的随机数发生器返回的是 0 到 1 的浮点值, 要取得范围在 0 到  N - 1 内的整数, 只要将随机数乘以 N 就可以了。

posted on 2006-10-09 14:26 ivaneeo 阅读(715) 评论(0)  编辑  收藏 所属分类: C-自由的灵魂

只有注册用户登录后才能发表评论。


网站导航: