如何在C++中生成高精度的随机双数?

2024-05-16

我正在尝试生成一系列高精度的双随机数。例如,0.856365621(小数点后有 9 位数字)。

我从网上找到了一些方法,但是,它们确实生成了双随机数,但精度没有我要求的那么好(只有小数点后6位)。

那么,我可以知道如何实现我的目标吗?


在 C++11 中,您可以使用<random> header http://en.cppreference.com/w/cpp/numeric/random在这个具体的例子中使用std::uniform_real_distribution http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution我能够生成超过6数字。为了查看设置将通过以下方式打印的位数std::cout我们需要使用std::setprecision:

#include <iostream>
#include <random>
#include <iomanip>    

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());

    std::uniform_real_distribution<> dist(1, 10);

    for( int i = 0 ; i < 10; ++i )
    {
       std::cout << std::fixed << std::setprecision(10) << dist(e2) << std::endl ;
    }

    return 0 ;
}

您可以使用std::numeric_limits::digits10 http://en.cppreference.com/w/cpp/types/numeric_limits/digits10以确定可用的精度。

std::cout << std::numeric_limits<double>::digits10 << std::endl;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C++中生成高精度的随机双数? 的相关文章