随机浮动生成器

Random Float Generator

本文关键字:随机      更新时间:2023-10-16

我正在学习c++,我试图生成一个随机浮点数,似乎有一些困难。

我首先创建一个随机int(), newRandom,介于-100和100之间,然后我将该newRandom转换为一个随机浮点数,rand_X,介于-1.0和1.0之间。唯一需要注意的是我不希望rand_X在-0.2到0.2之间,也就是

-1.0 & lt; = rand_X & lt; = -0.2和0.2 & lt; = rand_X & lt; = 1.0。

这是我的代码,

#include "stdafx.h"
#include <iostream>
#include <random>
int newRandom() {
    int newRandom = 0;
    std::random_device rd; // obtain a random number from hardware
    std::mt19937 eng(rd()); // seed the generator
    std::uniform_int_distribution<> distr(-100, 100); // define the range
    newRandom = distr(eng);
    return newRandom;
}
float newRandomX() {
    float rand_X = newRandom() / 100.0f;
    for (int n = 0; n > 0; n++) {
        if (rand_X < 0.0f && rand_X > -0.2f) {
            rand_X = newRandom() / 100.0f;
        }
        else if (rand_X > 0.0f && rand_X < 0.2f) {
            rand_X = newRandom() / 100.0f;
        }
        else {
            return rand_X;
        }
    }
}
int main()
{
    float dir_x = newRandomX();
    std::cout << dir_x;
}

我通常在main()的右括号处设置一个断点,这是我在控制台窗口中的输出,-nan(ind)

正如我所说,我正在学习语言,所以我可能在做一些非常愚蠢的事情。非常感谢您的帮助!

newRandomX()更改为:

float newRandomX() {
    float rand_X = newRandom() / 100.0f;
    while(rand_X > -0.2f && rand_X < 0.2f) {
        rand_X = newRandom() / 100.0f;
    }
    return rand_X;
}

输出:

0.75
-0.93
-0.43
-0.82

您当前的代码将只生成两个十进制数字(注意:舍入到浮点格式所支持的最接近的值)。为了获得更好的分布(即更多的数字),您应该将整数范围扩展到更大的范围,然后除以比100.0f更高的数字。

也不需要while-loop。我建议使用if语句。

假设你的newRandom生成一个范围为[-80:80]而不是[-100:100]的整数,那么你可以这样做:

float newRandomX() {
    float rand_X = newRandom() / 100.0f;
    if (rand_X < 0) {
        rand_X = rand_x - 0.2;
    } else {
        rand_X = rand_X + 0.2;
    }
    return rand_X;
}

如上所述,我还建议使用更大的整数范围