我有以下代码可以从测试版本中采样
#include <random>
#include <ext/random> // Include the header for __gnu_cxx::beta_distribution
int main() {
std::cout << "Starting program..." << std::endl;
try {
std::random_device rd;
std::mt19937 gen(rd());
__gnu_cxx::beta_distribution<double> dist(23, 171); // Use __gnu_cxx::beta_distribution
std::cout << "Generating random value..." << std::endl;
double random_value = dist(gen); // Assign the result to a variable
std::cout << "Random value generated: " << random_value << std::endl;
printf("Random value: %f\n", random_value); // Print the random value
} catch (const std::exception &e) {
std::cerr << "Error: " << e.what() << std::endl;
}
std::cout << "Ending program..." << std::endl;
return 0;
}
该进程因我不知道的原因而变得空闲https://www.programiz.com/online-compiler/0Jei4jG5u7M7f。但是,如果我将参数调整为 dist(1, 1),它会打印出 0.579891。我想知道我的实施出了什么问题。
实现包含无限循环,直到生成小于
__x
的__y
和1
:
result_type __x, __y;
do {
__x = std::exp(std::log(__aurng()) / __param.alpha());
__y = std::exp(std::log(__aurng()) / __param.beta());
} while (__x + __y > result_type(1));
根据您的值
alpha
和 beta
__x
始终位于 2.5
附近,而 __y
位于 1.1
附近,因此条件永远不会成立:https://godbolt.org/z/aKxoYKM1a
我找不到
__gnu_cxx::beta_distribution
的任何文档,但我想你的 alpha
和 beta
值只是无效值并导致未定义的行为。我建议不要使用此类,除非您可以找到其规范的文档。