gpt4 book ai didi

c++ - 如何在不重新发明轮子的情况下为自定义类型生成均匀分布的随机实数?

转载 作者:太空狗 更新时间:2023-10-29 23:13:05 25 4
gpt4 key购买 nike

我打算将 std::uniform_real_distribution 与一些非内置的类浮点类型一起使用,例如half_float::halfboost::multiprecision::float128 .但是我得到的是

/opt/gcc-5.2/include/c++/5.2.0/bits/random.h:1868:7: error: static assertion failed: template argument not a floating point type

来自 g++ 5.2。这是示例程序(使用 g++ -std=c++11 -fext-numeric-literals test.cpp -o test 编译):

#include <random>
#include <boost/multiprecision/float128.hpp>
#include <half.hpp>

template<typename Float>
void test()
{
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<Float> rnd(Float(1),Float(10));
}

int main()
{
test<float>();
test<double>();
test<long double>();
test<boost::multiprecision::float128>(); // doesn't compile
test<half_float::half>(); // doesn't compile
}

那么,应该如何为此类自定义类型生成均匀分布的随机实数?有没有不用重新发明轮子的方法?

最佳答案

here可以看出, uniform_real_distribution 定义为:

template< class RealType = double >
class uniform_real_distribution;

RealType 是:

The result type generated by the generator. The effect is undefined if this is not one of float, double, or long double.

您的编译器似乎明确禁止使用自定义类型作为处理(让我说)未接受的类型的解决方案。因此我会说你没有机会让它工作。

关于c++ - 如何在不重新发明轮子的情况下为自定义类型生成均匀分布的随机实数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com