Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/64: Рейтинг темы: голосов - 64, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227

Генератор дробных чисел с диапазоном

19.04.2020, 15:50. Показов 12735. Ответов 28
Метки cpp (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, подскажите, пожалуйста формулу.

p.s. Очень важно сделать генератор не используя ничего, кроме rand() (ну, логично,и с srand() )
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2020, 15:50
Ответы с готовыми решениями:

С помощью rand() сделать генератор дробных чисел
srand(time(NULL)); rand()%1000; этот генератор генерирует целые числа, как сделать что-бы он генерировал нецелые числа до 3-х знаков...

Генератор случайных дробных чисел
Подскажите как сделать генератор дробных чисел (диапазон 0,1-100, с точностью то тысяных)? как сделать генератор натуральных чисел я знаю. ...

Генератор комплексных чисел. Генератор гауссовских целых чисел
rand(1,n) - генерирует случайные числа, нормально распределенные на . Есть ли аналогичный генератор для комплексных чисел? В частности...

28
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.04.2020, 15:55
С каким диапазоном?
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
19.04.2020, 16:17
Сколько знаков после запятой?
1
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
19.04.2020, 16:24  [ТС]
nmcf, alexu_007, мне формула нужна, диапазон выбери любой...ну скажем от 0 до 1. Точность не важна, главное, чтобы было видно, что это дробь, а не целочисленное число.
0
Злостный нарушитель
 Аватар для Verevkin
10283 / 5707 / 1267
Регистрация: 12.03.2015
Сообщений: 26,435
19.04.2020, 16:28
Цитата Сообщение от d8veloper Посмотреть сообщение
скажем от 0 до 1
C++
1
x = rand() / (1.0 + rand());
1
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
19.04.2020, 16:29
C
1
float x = (rand()%1000)/1000;
1
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
19.04.2020, 16:29  [ТС]
Verevkin, 0 и 1 включаются или нет?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.04.2020, 16:34
Вот так будет [0;1]:
C++
1
rand() / static_cast<double>(RAND_MAX)
0
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
19.04.2020, 16:35  [ТС]
alexu_007, 0 и 1 включаются или нет?

Добавлено через 30 секунд
nmcf, мне чистый rand() надо, увы. static_cast и rand_max не надо.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.04.2020, 16:36
Ну а это какой? Что значит чистый?
0
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
19.04.2020, 16:36  [ТС]
nmcf, значит кроме rand есть только арифметические операторы, скобочки и процентики) upd и конечно же цифры.
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
19.04.2020, 16:38
Чистый rand даёт целые числа в диапазоне 0 - RAND_MAX.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.04.2020, 16:42
Цитата Сообщение от d8veloper Посмотреть сообщение
значит кроме rand есть только арифметические операторы
Там и использовано только деление.
0
Злостный нарушитель
 Аватар для Verevkin
10283 / 5707 / 1267
Регистрация: 12.03.2015
Сообщений: 26,435
19.04.2020, 16:44
Лучший ответ Сообщение было отмечено d8veloper как решение

Решение

Предыдущий ответ - говно.
Вот рабочий вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// в диапазоне [0, interval) 
double rand_interval(double interval)
{
  return interval * rand() / RAND_MAX;
}
 
// в диапазоне [a, b) 
double rand_range(double a, double b)
{
  if (a > b) return rand_range(b, a);
  return a + (b - a) * rand() / RAND_MAX;
}
1
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
19.04.2020, 16:48
Цитата Сообщение от d8veloper Посмотреть сообщение
alexu_007, 0 и 1 включаются или нет?
А нужно? То, что я написал даёт диапазон 0 - 0,999.
Ты ваще не врубаешься, как код работает и что эти загадочные крючки делают?


C
1
2
3
4
x = rand();  // даст случайное целое число в диапазоне 0 - RAND_MAX
x = rand()%1001;  // даст случайное целое число в диапазоне 0 - 1000;
x = (rand()%1001)/1000;  //  даст случайное число с плавающей точкой в диапазоне 0 - 1 
                                        //  (например 456/1000 = 0,456)
0
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
19.04.2020, 16:49  [ТС]
nmcf, хорошо. Будь так.

Добавлено через 57 секунд
alexu_007, да, я в генераторах случайных чисел плаваю, увы.
0
Злостный нарушитель
 Аватар для Verevkin
10283 / 5707 / 1267
Регистрация: 12.03.2015
Сообщений: 26,435
19.04.2020, 16:54
Графики распределения при тестировании на 128 значениях:

0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
19.04.2020, 18:27
Цитата Сообщение от d8veloper Посмотреть сообщение
alexu_007, да, я в генераторах случайных чисел плаваю, увы.
При чём тут генераторы, это простая арифметика. Генератор даёт тебе псевдослучайное (похожее на случайное) число, в диапазоне (ну например) 0 - 32767. А тебе нужен, например, диапазон 0 - 100. Тогда ты получаешь остаток от деления на 101. Допустим у тебя случайное число 0,на что бы мы его ни делили, всё равно будет 0. А если 100? Делим его на 101, получаем результат 0 и 100 в остатке. А если 101? 101/101 = 1 и ноль в остатке. И так далее. Какое бы мы число ни делили на 101, остаток всегда будет в диапазоне 0-100 (101 минус 1). Ну и остаётся эти наши числа 0-100 поделить на 100, и результат будет в диапазоне 0-1.

А если нужно 0,01 - 0,99? Тогда делаем так:

C
1
float x = (1 + rand()%99) / 100;
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
19.04.2020, 18:32
Цитата Сообщение от alexu_007 Посмотреть сообщение
(1 + rand()%99) / 100
тут целочисленное деление
0
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
21.04.2020, 12:46  [ТС]
alexu_007, спасибо за пояснения, хз, что я делал, но я не рассматривал эти формулы чисто с арифметической точки зрения. А зря!

Добавлено через 6 минут
alexu_007,upd твой код все время выдает 0. Есть идеи?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2020, 12:46
Помогаю со студенческими работами здесь

Сделать ввод 2 целых чисел как диапазоном, и вывести потом сумму парных чисел этого же промежутка
Дано задачу в которой нужно сделать ввод 2 целых чисел как диапазоном, и вывести потом сумму парных чисел этого же промежутка(JavaScript) ...

ЗадачкА с диапазоном чисел
Нужно написать программу в которую пользователь вводит диапазон чисел, например от 1 до 10, а программа выводит: 1,2,3,4,5,6,7,8,9,10....

Вывод чисел диапазоном
Добрый день. Имеется таблица с 25000 строк. все id строго от 1 до 25000. У каждой строки есть еще один идентификатор помимо ид...Задача -...

Генерация случайных чисел с диапазоном
Здравствуйте, мне нужно зарандомить случайные числа от INT_MIN до INT_MAX, т.е. от -2147483648 до 2147483647. Функция rand() не помогает,...

Условие с диапазоном чисел B4A
Здравствуйте, как в Basic4Android написать условие: if EditText1 = диапазону чисел от 1 до 18 then...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru