我想取一个32位的随机字符串,并将此位字符串声明为C++
中的浮点数。
例如,字符串0.0111 1111.1000 0000 0000 0000 0000 000
应该给出与1.5
对应的浮点数,因为根据IEEE 754-2008,这是1.5的F32定义。第一个0表示+ ve,接下来的8表示127-127 = 0的指数,23位尾数给出.5
。
如果字符串不是一个好的数据格式,那么我很乐意听到建议。
实际上我想在C ++中创建一个随机浮点数,但我不知道如何。随机而言我的意思是每个位独立地为0或1.我发现的解决方案(例如:C++ random float number generation)建议使用随机整数生成器,然后除以RAND_MAX
,然后乘以{ {1}}或以某种其他方式根据某种均匀分布创建浮点数。这对我来说并不好,因为虽然值将均匀分布,但这将产生更多带有大指数的浮点数。
基本上这个问题,但对于C ++:Convert Double to Binary representation?
答案 0 :(得分:1)
如果您只是想要一个RNG,它会喷出指数分布的浮点数,那么您不必担心二进制表示。只需使用数学。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <math.h>
int main (void) {
int i;
srand (time(NULL));
// Make 10 'random' floats
for (i = 0; i < 10; ++i)
{
// Float exponents go from -128 to 127
float exponent = -128 + 256 * (float) rand() / RAND_MAX;
float result = pow(2, exponent);
printf ("%g\n", result);
}
return 0;
}
如果你想任意生成解释为float的字节,你可以这样做......
int i = rand();
float result = *((float *)&i);
printf ("%g\n", result);