在C ++中用二进制字符串创建一个浮点数

时间:2016-08-23 16:34:11

标签: c++ floating-point

我想取一个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?

1 个答案:

答案 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);