【问题标题】:Random number between zero and one in c++ [duplicate]c ++中零和一之间的随机数[重复]
【发布时间】:2017-01-31 15:15:29
【问题描述】:

我想创建一个介于 0 和 1 之间的随机数,但我的代码输出为零。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
  srand(time(0));

  for(int x=0;x<100;x++)
  {
      cout<<(rand()%10)/10<<endl;
  }
  return 0;
}

【问题讨论】:

标签: c++ random


【解决方案1】:

这个:(rand()%10)/10 给你一个介于 0 和 RAND_MAX 之间的(低质量)随机整数,然后你使用模将它变成一个介于 0 和 9 之间的(有偏的)整数,然后你执行整数除以 10,这将始终小于 1 的值将被截断为零。

更好的解决方案是使用 C++11 中的随机工具并使用 std::uniform_real_distribution 来获得介于 0 和 1 之间的值。

【讨论】:

    【解决方案2】:

    你正在划分一个 int。任何低于 1 的都将被削减为 0。您需要声明/强制转换为 double 或 float(具有小数)。

    【讨论】:

    • 否 - 即使转换为 float 或 double 也不会给您一个介于 0 和 1 之间的均匀分布的随机数
    • @jhilmer 我只回答了部分问题(为什么输出为 0)。实际上并没有真正的问题,所以我只是给了他一个提示,试图纠正他的代码。我应该补充一点,这不是整个问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2021-04-30
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2011-04-05
    相关资源
    最近更新 更多