Algorithm 如何将值约束在一个范围内?
目前正在努力找出如何将值限制在某个范围内。也就是说,给定随机数219,我如何确保它被修改为保持在(2,5)的范围内 这是我当前的实现Algorithm 如何将值约束在一个范围内?,algorithm,random,Algorithm,Random,目前正在努力找出如何将值限制在某个范围内。也就是说,给定随机数219,我如何确保它被修改为保持在(2,5)的范围内 这是我当前的实现 int min = 2; int max = 5; int constrainedValue = (randomValue % max) + min 上述示例不起作用,因为(219%5)+2=(4)+2=6,显然6不在我要求的范围内 其目的是将随机数转换为适合我的范围的值。因此,我不能简单地用max或min进行mod,值在某种意义上必须是“随机的”。有两种常见的
int min = 2;
int max = 5;
int constrainedValue = (randomValue % max) + min
上述示例不起作用,因为(219%5)+2=(4)+2=6
,显然6
不在我要求的范围内
其目的是将随机数转换为适合我的范围的值。因此,我不能简单地用max或min进行mod,值在某种意义上必须是“随机的”。有两种常见的方法来约束值:
upper_bound = 5;
lower_bound = 2;
value = max(lower_bound, min(upper_bound, value))
上限-下限+1
:
value = mod(value, upper_bound - lower_bound + 1) + lower_bound
或
如果
随机值
是一个范围介于-32768和32767之间的整数
那么下面的内容将完成这项工作
int constrainedValue = (randomValue - -32,767) * (max - min) / (32,767 - -32,767) + min;
或同等地
int constrainedValue = (randomValue + 32,767) * (max - min) / (65,535) + min;
如果
randomValue
是一个无符号整数,则将-32767改为0,将32767改为65535。randomValue的范围(最大值和最小值)是什么?可以是任何值,但就我而言,将始终大于最大值;为什么不直接使用rand()函数并将min
和max
作为参数传递?您的代码是什么编程语言?
int constrainedValue = (randomValue + 32,767) * (max - min) / (65,535) + min;