Aamir Yousafi Ответов: 2

Генератор случайных чисел на языке Си с простой настройкой


Дорогие все, я просмотрел форумы и Google и нашел только сложные настройки для генераторов случайных чисел, которые более продвинуты, чем rand(). Моя проблема с rand () заключается в том, что я не могу изменить RAND_MAX, и даже когда я делаю это с помощью #undef и #define, за которыми следует целое число max, оно все равно не выходит за пределы 32768.

Вот что я ищу:
- Мне нужна случайная функция, к которой я могу получить доступ, включив заголовочный файл (независимо от того, заключен ли он в < & gt; или "").
- Он должен иметь максимум любого целого числа, которое может обрабатывать или длинные длинные или даже числа с плавающей запятой.
- Я также хотел бы, чтобы он мог генерировать отрицательные числа, если это возможно. Возможно, у меня есть обходной путь для этого, но было бы неплохо, если бы функция сгенерировала его сама.
- Я также хотел бы иметь диапазон чисел, в котором генерирующие функции остаются внутри.

Пожалуйста, направьте меня относительно несложных шагов для достижения этой цели, если я хочу запустить это на 64-разрядном компьютере Windows, используя мой любимый IDE-код:: Blocks. Заранее спасибо за вашу помощь.

Что я уже пробовал:

Я просмотрел форумы, не только этот, но и множество поисковых запросов в Google.

Mohibur Rashid

Что такое ваш компилятор?
Я только что протестировал это на linux 64 бит
#include < stdio.h>
#include <stdlib.h>

тап_п()
{
int i, n;
время Т;

printf ("%d\n", RAND_MAX);
n = 5;
/* Инициализирует генератор случайных чисел */
srand ((unsigned) time (& t));

/ * Выведите 5 случайных чисел от 0 до 49 */
для (i = 0 ; i < n; i++ )
{
printf ("%d\n", rand());
}

возврат (0);
}

в результате получается :
2147483647
584940180
862659951
1917044237
210835866
1005714980


2147483647 = (2^31)-1
и ваш максимум-это
32768 = (2^14)
Я предполагаю, что ваш RAND_MAX = 32767

Aamir Yousafi

Я использую компилятор GCC в 64-битной системе Windows. Да, я слышал, что реализация C на моем типе компьютера устанавливает RAND_MAX в 32768, и нет никакого способа изменить его. Ваш компьютер-это Linux. Я слышал, что C лучше всего работает в Linux. Для меня пока не практично и не доступно покупать ОС на базе Linux. А мой компьютер-ноутбук Acer V5-571g, вероятно, не с двойной загрузкой.

Mohibur Rashid

Ну а если у вас есть интерес работать в среде linux(я не уверен, что вы студент), не покупая новую, я бы дал вам небольшой совет. Установите виртуальную коробку. Это бесплатно. И установите linux(убедитесь, что не устанавливаете графическую версию). Получить Putty и SSH ..

Aamir Yousafi

но virtual box - это приложение для Windows, верно? Как бы я работал над C из этой среды?

Mohibur Rashid

Сначала установите виртуальную коробку. Затем создайте виртуальный компьютер. Затем установите linux на свой виртуальный компьютер, не забудьте установить openssh-сервер в свой виртуальный ящик. затем используйте шпатлевку.. и не ждите, что узнаете все в комментарии. пожалуйста, попытайтесь понять намек, начните учиться.

2 Ответов

Рейтинг:
2

OriginalGriff

Вы не можете изменить RAND_MAX, потому что это константа, и ее реализация зависит: она может быть установлена на максимальное значение, которое может быть сохранено в целочисленном знаке в системе, на которую нацелен компилятор (но это не обязательно, это может быть меньше): в системах на базе Windows она установлена на 32767 по соображениям совместимости, которые, вероятно, сегодня не нужны.
Если вам нужен больший диапазон случайных значений, то это трудно сделать в среде, основанной на языке Си, поскольку библиотеки, доступные для программ на языке Си, в наши дни довольно стары и вряд ли будут обновлены.
Один из способов получить большее случайное число - использовать rand несколько раз и сдвиньте биты в большее число, как это предлагается здесь: Как генерировать большие случайные числа C-Stack Overflow[^]
But...do обратите внимание, что при максимальном значении 32767 вам нужно будет каждый раз сдвигать свои значения на 15 бит, а не на 16, как они показывают, иначе вы получите огромные "пробелы" в значениях, вызванные обнуленным битом 15 каждый раз.


CPallini

5.

Mohibur Rashid

это захватывающая идея. Я собирался предложить вам получить visual studio express. Но это тоже было бы здорово...

Рейтинг:
2

CPallini

Если вы можете использовать C++ тогда взгляните на эту страницу: random-C++ ссылка[^].


Aamir Yousafi

Ну, CPallini, я не использую C++ прямо сейчас, поэтому я не собираюсь вдаваться в это прямо сейчас. Я сохраню это на будущее (возможно, в ближайшем будущем). Спасибо.