[技术问答] 单片机C语言如何产生随机数

[复制链接]
5797|51
qiufengsd 发表于 2025-3-20 09:53 | 显示全部楼层
伪随机数生成器具有周期性,即它们最终会重复之前的随机数序列。
bartonalfred 发表于 2025-3-20 10:38 | 显示全部楼层
更为复杂的伪随机数生成器,具有较长的周期和较好的统计特性。
deliahouse887 发表于 2025-3-20 14:01 | 显示全部楼层
可以通过模拟数字转换器(ADC)读取外部模拟信号的微小波动来获取随机数。
modesty3jonah 发表于 2025-3-20 14:37 | 显示全部楼层
#include <stdio.h>

#define MAX_RAND 32767
#define A 16807
#define C 0
#define M 2147483647

int rand() {
    static int seed = 1; // 初始种子
    seed = (A * seed + C) % M;
    return seed;
}

int main() {
    int random_number = rand() % MAX_RAND; // 生成0到MAX_RAND之间的随机数
    printf("Random number: %d\n", random_number);
    return 0;
}
bartonalfred 发表于 2025-3-20 15:27 | 显示全部楼层
结合ADC噪声和线性同余法生成更复杂的随机数。
lihuami 发表于 2025-3-20 16:51 | 显示全部楼层
利用单片机内部的硬件特性,如时钟的轻微偏差、内存的初始化状态等,作为随机数的来源。
星辰伴梦 发表于 2025-3-21 22:39 | 显示全部楼层
srand()函数是用来设置随机数种子的
旧时光放映机 发表于 2025-3-21 23:23 | 显示全部楼层
利用单片机定时器取值来产生随机数,这种方法对定时器的精度有没有什么要求呢
Pretext 发表于 2025-4-18 14:58 | 显示全部楼层
伪随机数就是看起来随机,但实际上有规律可循的数。单片机软件生成这些数,可以用于模拟随机事件,但不可用于加密或安全应用。
nowboy 发表于 2025-4-19 23:18 | 显示全部楼层
伪随机数虽然像真随机数,但统计特性不如真随机。
hmcu666 发表于 2025-4-21 22:04 | 显示全部楼层
为了获取真正的随机数,通常会使用专门的随机数发生器芯片。
魔法森林精灵 发表于 2025-4-23 10:24 | 显示全部楼层
确实,使用单片机的定时器值作为随机数种子是一种简单有效的方法,但正如你所说,它并不是真正意义上的随机。
时光贩卖机 发表于 2025-4-23 21:11 | 显示全部楼层
定时器取值的方法确实简单,但可能不够随机。用rand()函数结合srand()设置种子可以提供更好的随机性。
治愈糖果屋 发表于 2025-4-24 22:03 | 显示全部楼层
确实,使用定时器的值作为随机数种子是一种简单有效的方法,但正如你所说,它并不是真正意义上的随机。
懒癌晚期患者 发表于 2025-4-25 20:49 | 显示全部楼层
确实,利用定时器的未知值来生成随机数是一种简单直接的方法,但可能不够精确。使用rand()函数结合srand()设置种子可以提供更好的随机性。
zhuomuniao110 发表于 2025-4-26 20:34 | 显示全部楼层
纯粹的随机数太难了。
芯路例程 发表于 2025-4-28 23:18 | 显示全部楼层
系统计时器像钟表,记录时间,每次看都不一样,能帮我们生成像扔硬币那样的随机数。
lllook 发表于 2025-4-29 21:00 | 显示全部楼层
ADC读取模拟信号数据做为种子,可以用来产生随机数。
单片小菜 发表于 2025-4-30 12:18 | 显示全部楼层
这个随机数不错
V853 发表于 2025-5-3 19:17 | 显示全部楼层
将环境噪声输入单片机,作为随机数发生器种子,生成随机数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部