缩放32位随机数以使其进入特定范围?

时间:2017-03-26 03:34:40

标签: arm keil

在ARM程序集中 如何缩放32位随机数以获得4.0-25.0之间的数字?

我能想到的只是提取前五位并使用它,但这并不是真正的缩放......

我正在寻找乘法和除以32位数以使其进入该范围的东西。

2 个答案:

答案 0 :(得分:0)

您要实现的技术是这样的(在C中):

float scale (u32 v)
{
    return  (float) v / 0xffffffffL * (25 - 4) + 4.0;
}

由于分母是常数,如果速度很重要,可以仅使用乘法重写。

答案 1 :(得分:0)

wallyk回答了这个问题,但这只是小学的一些东西,写下两个分数并解决未知问题。

x/y = a/b

rand/0xFFFFFFFF = a/21

(rand/0xFFFFFFFF)*21=a;

然后你将4添加到。

如果它足够准确,你可以这样做

(rand/204522252.143)+4.0

如果您编写正确的代码,编译器可能会为您优化

x=((rand/((double)0xFFFFFFFF))*21.0)+4.0;

x=((rand/4294967295.0)*21.0)+4.0;