c - 如何使用范围 [-a,a] 中的 libsodium 在 C 中生成均匀分布的随机 double ?

标签 c random double libsodium

libsodium 库有一个函数

uint32_t randombytes_uniform(const uint32_t upper_bound);

但显然这会返回一个无符号整数。我能以某种方式使用它在 [-a,a] 范围内生成均匀分布的随机 double 其中 a 也是由用户?我特别关注均匀分布/无偏的结果,所以这就是我想使用 libsodium 库的原因。

最佳答案

const uint32_t mybound = 1000000000; // Example
const uint32_t x = randombytes_uniform(mybound);
const double a = 3.5; // Example
const double variate = a * ( (2.0 * x / mybound) - 1);

关于c - 如何使用范围 [-a,a] 中的 libsodium 在 C 中生成均匀分布的随机 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55850871/

相关文章:

c - 使用PAPI的一些问题

Java将int值链接到随机生成的代码

java - 为什么此代码不生成随机代码?

java - 为什么使用 truncate 和 BigDecimal 会出现这种奇怪的输出?

c - C语言中%c和%s有什么区别

c - printf 语句打印前一个 printf 语句

c - C 中的宏和前/后增量

swift - AND (&&) 运算符在 SWIFT 中未按预期工作

c - 如何检查是否使用了 IEEE 754 单精度(32 位)浮点表示法?

postgresql - 日期postgres之间的 double 月数