用C语言生成[0,1)之间的随机浮点数
阅读量:
searchstar
2020-07-19 20:36:42
Categories:
Tags:
参考:
如何用C语言生成(0,1)之间的随机浮点数? - Milo Yip的回答 - 知乎
https://www.zhihu.com/question/25037345/answer/29879012
#if RAND_MAX == 0x7fffffff
float randf() { int r = (rand() >> 8) | 0x3f800000;; return *(float *)&r - 1; } #else #error Error: RAND_MAX != 0x7fffffff. #endif
|
double同理。
注意这里因为RAND_MAX的最高位是0,所以只需要右移8位就可以腾出9位给符号位和阶码了。
测试:
#include <stdio.h> #include <stdlib.h> #include <time.h>
#if RAND_MAX == 0x7fffffff
float randf() { int r = (rand() >> 8) | 0x3f800000;; return *(float *)&r - 1; } #else #error Error: RAND_MAX != 0x7fffffff. #endif
int main() { srand(time(NULL));
printf("%d\n", RAND_MAX); for (int i = 0; i < 10; ++i) { printf("%f\n", randf()); }
return 0; }
|
输出:
2147483647 0.926574 0.300805 0.337950 0.574079 0.370166 0.259473 0.873635 0.062161 0.585904 0.005816
|
以上例程只能在Linux上运行,不能在windows上运行,因为windows的RAND_MAX是0x7FFF。如果需要在windows上运行,可以自己写一个(或者找一个)生成31位随机数的函数取代rand()
,反正原理都是一样的。