【问题标题】:Does rand() function exist in mikroc?mikroc 中是否存在 rand() 函数?
【发布时间】:2013-03-05 09:05:31
【问题描述】:

如何在 mikroC 中实现 rand() C++ 函数?

我尝试了 rand() 但不起作用...我不知道如何解决这个问题

【问题讨论】:

  • 阅读简单的实现。您也可以使用 ADC 的噪声来提高随机性。
  • 与编译器无关,而与您正在使用的libc有关。
  • 我想实现一个俄罗斯方块游戏,但我不知道如何随机生成形状
  • 你确定吗?当 mikroc 真的像它声称的那样符合 ANSI 标准时,它应该在 stdlib.h 中包含 rand()。

标签: c pic mikroc


【解决方案1】:

如果您的 C 实现符合 C89,它应该包含一个有效的 rand() — 也许您忘记包含 <stdlib.h>

如果不是,那么编写自己的rand 是微不足道的,只要您不需要非常高质量的生成数字,出于俄罗斯方块的目的,您不应该这样做。这个微小的实现被 POSIX 推广为需要跨架构重复相同伪随机数序列的程序的一个选项:

static unsigned long next = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}

void mysrand(unsigned seed) {
    next = seed;
}

它不会给你很大的伪随机性,但也不会比rand() 的许多现实实现差。

【讨论】:

  • 您能否提供此示例的链接(或告诉我如何创建种子)?
  • @DavidRF 链接到什么例子?发布的代码是独立的。
  • @user4815162342,我想知道种子(传递给 mysrand 的参数)是如何创建的,也许是使用时间?,谢谢。
  • @DavidRF 是的,播种 RNG 的经典方法是在程序启动时调用 srand(time(NULL))
  • 这听起来像是创建“非常可预测的随机数”的好方法。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2012-11-08
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多