簡體   English   中英

產生從負到正范圍的隨機浮動?

[英]Producing random float from negative to positive range?

我試圖使用rand()在-50.0和50.0范圍內產生一個隨機浮點數。 我到處尋找答案,但它處理的是int和%運算符。

試試這個:

float RandomNumber(float Min, float Max)
{
    return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
}

試試這個:

  1. rand()為您提供0到RAND_MAX之間的數字
  2. 因此除以RAND_MAX以獲得介於0和1之間的數字
  3. 你希望從-50到50的范圍是100,所以乘以100.0
  4. 最后通過減去50.0將中心從50(每點3在0到100之間)移到零
((float)rand())/RAND_MAX * 100.0 - 50.0

老實說,所有目前的答案都沒有解釋他們的解決方案中的分布發生了變化(我假設rand()遵循統一分布!如果我錯了請糾正我)。 請使用庫,我的建議是使用C ++ 0x中的新工具:

#include <random>
#include <functional>

int main()
{
    std::mt19937 generator;
    std::uniform_real_distribution<float> uniform_distribution(-50.0, 50.0);
    auto my_rand = std::bind(uniform_distribution, generator);
}

如果你做不到,Boost是一個完美的選擇。 這樣,你可以使用my_rand()就像好的'rand():

std::vector<float> random_numbers(1000);
std::generate(random_numbers.begin(), random_numbers.end(), my_rand);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM