2016-05-18 3 views
-3

Я работаю с алгоритмом и хотел бы сделать некоторые статистические данные по нему с очень большими случайными числами. Я хотел бы, чтобы числа, сгенерированные, приходили из интервала [2^255, 2^256], но это было бы эквивалентно порождению числа в [0,2^255].Создание очень больших случайных чисел в C++

Я работаю на C++, но я очень новичок в программировании и знаю только основы. Это даже правдоподобная вещь (с точки зрения памяти и вычислительной мощности)? Я видел другие сообщения, касающиеся 2^32 и 2^64, но не нашел ничего такого большого. Единственными вычислениями, которые я буду делать с этими числами, являются сравнение, деление и вычитание.

Если да, то как бы написать код для выполнения такой задачи?

+2

«такая задача» - какая часть задачи? в настоящее время это очень широкий вопрос ... –

+1

Вам нужны фактические целочисленные значения, или приблизительные значения будут в порядке? Если приблизительные значения пригодны для использования, то двойники должны обрабатывать его, иначе вам понадобится библиотека произвольных чисел точности. http://stackoverflow.com/questions/310276/how-to-handle-arbitrarily-large-integers – user1937198

+0

Каким типом данных вы будете манипулировать таким большим количеством? – Sean

ответ

1

Эта задача сама по себе довольно тривиальна. Самая сложная часть - это, вероятно, просто выбор того, как представить свое большое количество. На данный момент допустим массив из 4 unsigned long long (каждый из которых, как предполагается, должен содержать не менее 64 бит, поэтому 4 должно быть не менее 256 бит).

struct big_num { 
    unsigned long long data[4]; 
}; 

big_num gen_random() { 
    big_num ret; 
    std::mt19937_64 gen; 

    for (int i=0; i<4; i++) 
     ret[i] = gen(); 
    return ret; 
} 

Как, вероятно, очевидно, из этого, размер почти не имеет значения. Мы в основном просто производим некоторое количество случайных бит (64 из них за раз) и толкаем их в какой-то контейнер, а затем возвращаем контейнер.

Единственный трюк для использования этой основной идеей с другой «контейнер» ваш выбор становится для представления контейнера битов, так что вы можете манипулировать отдельными long, long long (или любой другой) компоненты, используемые для хранения значения , Поскольку наибольший тип (гарантированный), встроенный в C или C++, составляет 64 бита, в значительной степени гарантируется, что любой способ хранения числа, большего, чем это, будет делать это путем хранения некоторого количества меньших объектов, которые могут быть представлены с помощью родной тип.

Смежные вопросы