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

Scaling a 32 bit random number to get it into specific range?

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

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

我正在寻找诸如乘除 32 位数之类的方法以使其进入该范围。

你想要实现的技术是这样的(在C):

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

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

wallyk 回答了它,但这只是小学的东西,写下两个分数并求解未知数。

x/y = a/b

rand/0xFFFFFFFF = a/21

(rand/0xFFFFFFFF)*21=a;

然后你给a​​加4。

如果对你来说足够准确,你可以这样做

(rand/204522252.143)+4.0

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

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

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