как сгенерировать число 1 либо -1 в с++

Мне надо сгенерировать рандомно либо 1, либо -1. Если сгенерируется 0 то программа будет работать неправильно. Какая функция мне для этого подходит


Ответы (2 шт):

Автор решения: Faraday

Простая реализация:

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]
→ Ссылка