C++生成随机浮点数-创新互联

前言

在C++11之前,我们通常采用rand函数来生成随机数。

成都网站设计、成都网站制作服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联公司把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!

但rand函数对一些情况显得难以处理:

  1. 不同范围的随机数
  2. 需要随机浮点数
  3. 需要非均匀分布的随机数

下文将使用C++11定义在头文件random中的随机数库通过一组协作的类来解决这些问题:随机数引擎类和随机数分布类。

  • 一个引擎类可以生成unsigned随机数序列
  • 一个分布类使用一个引擎类生成指定类型的、在给定范围内的、服从特定概率分布的随机数

IU

生成等概率随机数 生成随机整数

uniform_int_distribution:产生均匀分布的整数

templateclass uniform_int_distribution;

// IntType
// An integer type. Aliased as member type result_type.
// By default, this is int.
#include#include#includeusing namespace std;

int main()
{// 产生[1, 100]左闭右闭区间的随机整数
	uniform_int_distributionu(1, 100);
	default_random_engine e;
    // 为随机数引擎设置随机种子, 若不设置每次生成的随机数相同(可以创建时设置)
    // 类似srand的用法, 相同的种子生成的随机数相同
    // default_random_engine e(time(NULL));
    e.seed(time(NULL));

	for (size_t i = 0; i< 10; ++i)
	{cout<< u(e)<< " ";
	}
	cout<< endl;

	return 0;
}
生成随机浮点数

uniform_real_distribution:产生均匀分布的实数

templateclass uniform_real_distribution;

// RealType
// A floating-point type. Aliased as member type result_type.
// By default, this is double.
#include#include#includeusing namespace std;

int main()
{// 生成[-1, 1]范围随机浮点数
    // 模板参数只能是浮点类型(float, double, long double)
	uniform_real_distributionu(-1, 1);
    default_random_engine e(time(NULL));

	for (size_t i = 0; i< 10; ++i)
	{cout<< u(e)<< " ";
	}
	cout<< endl;
    
	return 0;
}
生成非均匀分布随机数 正态分布随机数
templateclass normal_distribution;
#include#include#includeusing namespace std;

int main()
{// 生成符合均值为10, 标准差为2的随机数
	normal_distributionu(10, 2);
    default_random_engine e(time(NULL));
    
	for (size_t i = 1; i<= 100; ++i)
	{printf("%-9.6lf ", u(e));
		if (i % 10 == 0)
		{	cout<< endl;
		}
	}
    cout<< endl;

	return 0;
}
二项分布的布尔值
class bernoulli_distribution;
#include#include#includeusing namespace std;

int main()
{// 生成1的概率为0.7
	bernoulli_distribution u(0.7); 
    default_random_engine e(time(NULL));

	for (int i = 0; i< 10; i++) {cout<< u(e)<< " ";
	}
    cout<< endl;

	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:C++生成随机浮点数-创新互联
分享网址:http://scyanting.com/article/icehh.html