как сгенерировать число 1 либо -1 в с++
Мне надо сгенерировать рандомно либо 1, либо -1. Если сгенерируется 0 то программа будет работать неправильно. Какая функция мне для этого подходит
Ответы (2 шт):
Автор решения: Faraday
→ Ссылка
- Вопрос на stackoverflow
- Документация Microsoft
Простая реализация:
srand(time(NULL));
int r = rand() % 2;
int value = r ? 1 : -1;
Автор решения: Harry
→ Ссылка
Вам попроще или посложнее? :) И с какой вероятностью должно быть -1, а с какой 1?
Если равновероятно и попроще, через rand(), то
(rand()%2)*2-1
и будет простейшим решением.
Существенно более корректное С++11 решение использует распределение:
double probability = 0.3; // вероятность -1
std::default_random_engine rgen{std::random_device{}()}; // генератор
std::discrete_distribution<> pm1({probability, 1.-probability}); // распределение
int nextValue() {
return pm1(rgen)*2-1;
}
Можно в принципе спрятать все переменные в функции
int nextValue(double probability)
{
static std::default_random_engine rgen{std::random_device{}()};
std::discrete_distribution<> pm1{{probability, 1.-probability}};
return pm1(rgen)*2-1;
}
Для rotabor
int harry(int x) { return x*2-1; }
int rotabor(int x){ return (x<<1&2)-1; }
; 26 : return x*2-1;
lea edx, DWORD PTR [rbx*2-1]
; 31 : return (x<<1&2)-1;
lea edx, DWORD PTR [rbx*2-1]