获得某个范围内的随机数

本文介绍了一个简单的Java方法,用于生成两个指定数值之间的随机数。该方法避免返回边界值,确保了生成的随机数总是在给定范围内但不包括边界。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-size:14px;">@Test
	public void testRandom() {
		System.out.println(random(1l, 10l));
	}

	/**
	 * 根据输入的两个数,获得这两个数之间的某个随机数
	 * 
	 * @author: 
	 * @createTime: 2015年1月5日 上午10:57:28
	 * @history:
	 * @param begin
	 * @param end
	 * @return long
	 */
	private static long random(long begin, long end) {
		long rtn = begin + (long) (Math.random() * (end - begin));
		if (rtn == begin || rtn == end) {
			return random(begin, end);
		}
		return rtn;
	}</span>

 

STM32微控制器中生成限定范围内随机数通常可以借助其内置的随机数生成功能或者外设如ADC的噪声作为随机源。如果你想要在预设范围内生成伪随机数,一种常见的方法是使用软件算法,比如线性同余法(Linear Congruential Generator, LCG)。以下是一个简单的步骤: 1. **初始化**: - 初始化一个种子值,这通常是时间戳的一部分或者存储在特定寄存器中,用于后续计算。 ```c uint32_t seed = SystemCoreClock / 100; // 或者使用系统时钟的某个部分作为种子 ``` 2. **定义生成函数**: - 使用线性同余公式生成下一个随机数,这里假设 `a`, `m` 和 `r` 分别是乘法因子、模数和减去最小值的操作数。 ```c static uint32_t rand(uint32_t a, uint32_t m, uint32_t r) { seed = (a * seed) % m; if (seed < r) return seed; else return seed - r; // 如果大于r,则从m中减去r,得到限定范围内随机数 } ``` 3. **应用范围限制**: - 调用生成函数,并传入适当的 `a`, `m` 和 `r` 值,以便得到你需要的指定范围内随机数。例如,如果你想在0到99之间生成随机数,你可以设置 `a=1103515245`, `m=2^32-1` 和 `r=m/100`。 ```c uint32_t randomInRange = rand(1103515245, (1 << 32) - 1, (1 << 32) - (1 << 31)); ``` 请注意,虽然这种方法能生成看似随机的数,但对于安全性要求较高的应用,可能需要更复杂的随机数生成方案,比如硬件提供的真随机数发生器(TRNG)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间辜负了谁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值