我试图理解一个 C 程序,其中包含一个 .h 文件,其中包含以下行
#define random ((float) rand() / (float)((1 << 31) - 1))
C程序还包括<math.h>
.
我的猜测是,这只是从区间 [0,1] 上的均匀分布中产生一个随机数;它是否正确?
表面上是的。但它在两个主要方面是错误的:
Use RAND_MAX
反而。这就是它的用途。它可能比1 << 31 - 1
.
1 << 31
会给你未定义的行为在一个平台上32 bit int
或更少,这是非常常见的。不要那样做!
请注意,如果您不想恢复值 1(通常是这种情况),则使用RAND_MAX + 1.0
在分母上。这1.0
强制以浮点计算:如果您编写,您将面临整数类型溢出的风险RAND_MAX + 1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)