在ARM程序集中 如何缩放32位随机数以获得4.0-25.0之间的数字?
我能想到的只是提取前五位并使用它,但这并不是真正的缩放......
我正在寻找乘法和除以32位数以使其进入该范围的东西。
答案 0 :(得分:0)
您要实现的技术是这样的(在C
中):
float scale (u32 v)
{
return (float) v / 0xffffffffL * (25 - 4) + 4.0;
}
由于分母是常数,如果速度很重要,可以仅使用乘法重写。
答案 1 :(得分:0)
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;