[其他ST产品] 关于keil使用随机数

[复制链接]
780|2
 楼主| 在水一方00 发表于 2023-12-20 15:54 | 显示全部楼层 |阅读模式
本人的方法
应为keli不能使用time.h,无法用时间戳来随机一个数据,我个人觉得300个随机数已经够用了,这个生成随机数的关键就在于srand(x);这个函数,如何x数相同,那么就算你后面使用到rand() 函数也无济于事,你会发现生成的数都是相同的。

对我个人来说,我做这个项目只需要300个随机数就足够了写法为(写法过于片面):

这是生成的随机数范围定义


int a=m+rand()%(n-m+1);#include <stdio.h>
#include <stdlib.h>

int b;

/**
  * @brief  生成随机数据
  * @param  None
  * @retval int a=m+rand()%(n-m+1);
  */
int RandNum(void){
        int a;
        printf("随机产生1个[50,150)范围内随机数:\n\n");
        srand(b);   //用时间作种子
        b++;
        if(b>300)
                b=0;
        //srand(time(0));
        a = 50+rand()%100;
        printf("随机数为:%d",a);
        return a;
          
}       

 楼主| 在水一方00 发表于 2023-12-20 15:55 | 显示全部楼层
他人写法
  1. /* 产生一个300左右的有符号随机数 */
  2. int16_t get_ad(void)
  3. {
  4.         int16_t RandomNum;              //随机数            
  5.         uint16_t i,RemainderNum;        //余数
  6.         RemainderNum = 1+(int16_t)(10.0*rand()/(RAND_MAX + 1.0));//产生一个10以内的随机数
  7.         RandomNum = 0x127 + RemainderNum;
  8.         printf(", RandomNum = ");       //波形显示用
  9.         printf("%d",RandomNum);
  10.         return RandomNum;
  11. }
 楼主| 在水一方00 发表于 2023-12-20 15:55 | 显示全部楼层
他人写法
  1. /* 产生一个300左右的有符号随机数 */
  2. int16_t get_ad(void)
  3. {
  4.         int16_t RandomNum;              //随机数            
  5.         uint16_t i,RemainderNum;        //余数
  6.         RemainderNum = 1+(int16_t)(10.0*rand()/(RAND_MAX + 1.0));//产生一个10以内的随机数
  7.         RandomNum = 0x127 + RemainderNum;
  8.         printf(", RandomNum = ");       //波形显示用
  9.         printf("%d",RandomNum);
  10.         return RandomNum;
  11. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

581

帖子

0

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