Форум программистов, компьютерный форум CyberForum.ru

Rand() выходит за диапазон - C++

Восстановить пароль Регистрация
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
27.07.2014, 11:33     Rand() выходит за диапазон #1
Две функции:

C++
1
2
3
4
5
6
7
8
9
10
11
inline void Playing_card::set_random_suit()
{
    std::srand(time(NULL));
    suit_ = Card_suit(rand() % spades + clubs); // spades(enum)=4, clubs(enum) = 1
}
 
inline void Playing_card::set_random_value()
{
    std::srand(time(NULL));
    value_ = rand() % d_.range[1] + d_.range[0]; //d_range - массив int
}
Первая функция всегда выводит значение в диапазоне от [clubs; spades], а последняя функция должна возвращать значение от 2(6) до 13, но почему то значения всегда выходят за пределы 13! d_range[0] равен 2 или 6, а d_range[1] всегда равен 13.
В чем проблема?
Миниатюры
Rand() выходит за диапазон  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2014, 11:33     Rand() выходит за диапазон
Посмотрите здесь:

C++ rand()
rand C++
rand C++
C++ Как задать диапазон с помощью функции rand?
C++ rand от 1 до 16
rand()%(-20)%(20); C++
rand C++
rand() C++
Диапазон отрицательных чисел. Функция rand() C++
C++ Как увеличить диапазон rand()?
Как задать диапазон rand C++
C++ Вектор выходит за диапазон

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vlad0922
29 / 23 / 4
Регистрация: 20.11.2013
Сообщений: 65
27.07.2014, 11:43     Rand() выходит за диапазон #2
Но последняя функция у вас может вернуть более 13.
Пусть
C++
1
rand() % d_.range[1]
Вернет 10, а в d_.range[0] хранится 6.
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
27.07.2014, 11:48  [ТС]     Rand() выходит за диапазон #3
Изменил строку вот так, теперь работает.
C++
1
value_ = rand() % (d_.range[1]-d_.range[0]) + d_.range[0];
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,452
Завершенные тесты: 1
27.07.2014, 11:50     Rand() выходит за диапазон #4
Уиверсальная формула получения числа в диапазоне [a,b]
C++
1
double x=((double)rand()/RAND_MAX)*(b-a)+a;
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
27.07.2014, 11:58  [ТС]     Rand() выходит за диапазон #5
zss, а если тип не double? просто заменить все double на другой тип?
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,452
Завершенные тесты: 1
27.07.2014, 12:33     Rand() выходит за диапазон #6
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
если тип не double
Советую вычислить в double, а потом привести к нужному типу.
Yandex
Объявления
27.07.2014, 12:33     Rand() выходит за диапазон
Ответ Создать тему
Опции темы

Текущее время: 21:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru