При использовании фиксированного посевного материала внутри диапазона, результаты не воспроизводятся при изменении точности. А именно, если изменить аргумент шаблона cpp_dec_float<xxx>
и запустить следующий код, будут видны разные выходные данные (для каждого изменения точности).
#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <random>
#include <boost/random.hpp>
typedef boost::multiprecision::cpp_dec_float<350> mp_backend; // <--- change me
typedef boost::multiprecision::number<mp_backend, boost::multiprecision::et_off> big_float;
typedef boost::random::independent_bits_engine<boost::mt19937, std::numeric_limits<big_float>::digits, boost::multiprecision::cpp_int> generator;
int main()
{
std::cout << std::setprecision(std::numeric_limits<big_float>::digits10) << std::showpoint;
auto ur = boost::random::uniform_real_distribution<big_float>(big_float(0), big_float(1));
generator gen = generator(42); // fixed seed
std::cout << ur(gen) << std::endl;
return 0;
}
Думаю, это кажется разумным. Но как мне сделать так, чтобы для n
цифр точности фиксированное начальное число давало число x
, которое эквивалентно y
в пределах n
цифр, где y
определено для n+1
цифр? например
x = 0.213099234 // n = 9
y = 0.2130992347 // n = 10
...