CARLA
 
载入中...
搜索中...
未找到
RandomEngine.cpp
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#include "Carla.h"
8#include "RandomEngine.h"
9
10#include <limits>
11
12// URandomEngine类的命名空间作用域内的函数,用于生成一个随机的64位无符号整数ID
13// 该函数被设计为尽量快速执行,因为可能会相对频繁地被调用
14// 使用了线程局部存储(thread_local)来保证每个线程有独立的随机数生成器实例,避免多线程下的冲突
15// 基于 std::mt19937_64 这个64位的梅森旋转算法随机数引擎来生成随机数
16// 通过 std::uniform_int_distribution 来定义一个均匀分布,范围是整个64位无符号整数的取值范围
17// 最后从这个分布中获取一个随机数并返回作为随机ID
19{
20 // Tuned to be fast as this function might get called relatively often.
21 // 创建一个线程局部的64位梅森旋转算法随机数引擎实例,使用 std::random_device 来初始化它,以获取一个随机的初始状态
22 static thread_local std::mt19937_64 Engine((std::random_device())());
23 // 定义一个均匀分布,其取值范围是从64位无符号整数的最小值到最大值
24 std::uniform_int_distribution<uint64> Distribution(
25 std::numeric_limits<uint64>::lowest(),
26 std::numeric_limits<uint64>::max());
27 // 使用定义好的随机数引擎和分布来生成一个随机数,并返回该随机数作为随机ID
28 return Distribution(Engine);
29}
30
31// URandomEngine类的命名空间作用域内的函数,用于生成一个随机的32位有符号整数种子
32// 使用 std::random_device 来获取一个基本的随机源,然后通过 std::uniform_int_distribution 定义一个均匀分布
33// 范围是整个32位有符号整数的取值范围,最后从这个分布中获取一个随机数作为种子返回
35{
36 // 创建一个随机设备对象,它可以作为一个获取随机数的基础源,不同系统下实现方式不同,但通常会利用系统提供的随机源(如硬件熵源等)
37 std::random_device RandomDevice;
38 // 定义一个均匀分布,其取值范围是从32位有符号整数的最小值到最大值
39 std::uniform_int_distribution<int32> Distribution(
40 std::numeric_limits<int32>::lowest(),
41 std::numeric_limits<int32>::max());
42 // 使用随机设备对象和定义好的分布来生成一个随机数,并返回该随机数作为随机种子
43 return Distribution(RandomDevice);
44}
45
46// URandomEngine类的命名空间作用域内的函数,用于生成一个随机的32位有符号整数种子
47// 调用了 GetUniformIntInRange 函数(这里推测其功能应该是在给定的整数范围内获取一个均匀分布的随机整数)
48// 传入的范围是整个32位有符号整数的取值范围,最终返回获取到的随机种子
50{
52 std::numeric_limits<int32>::lowest(),
53 std::numeric_limits<int32>::max());
54}
std::minstd_rand Engine
int32 GetUniformIntInRange(int32 Minimum, int32 Maximum)
static uint64 GenerateRandomId()
生成一个非确定性随机种子。
static int32 GenerateRandomSeed()
生成一个非确定性随机数种子。
int32 GenerateSeed()
基于前一个种子生成一个新的种子。