Эффективным способом создания случайных чисел в C/C++ является функция rand()
. но я видел такой код, чтобы создавать случайные переменные:
int x; x%=100;
Является ли это хорошим способом создания простого случайного числа? Если ваш ответ отрицательный, скажите, пожалуйста, почему?
EDIT: ну реальный код здесь:
int temp1,temp2;
A=(abs(temp1))%11-1;
B=(abs(temp2))%11-1; //Randomize without using rand()
Мой друг написал этот код. Я попытался скомпилировать его, и я получил uninitialized local variable 'temp1' used
ошибку (на MSVS). Он написал этот код в 2011 году, и он работал над своим Linux с последней версией GCC.
Редко видеть что-то хуже.
У вас есть неопределенное поведение, так как вы используете неинициализированную переменную.
И использование модуля приводит к статистическому смещению.
Ваш друг неправильно понял неинициализированные переменные.
Игнорируя на мгновение, что чтение из них не определено и может, таким образом, сделать что угодно, если вы притворитесь, что они будут безопасно давать произвольное значение, тогда вам нужно помнить, что произвольное не означает случайное.
Этот подход имеет место между минимальным и никаким случайным распределением значений. Таким образом, вы не сможете предсказать, что вы вернете, но это не делает его полезным "случайным" в каком-либо значимом смысле.
Также, применяя %
руины любого дистрибутива, так и не делайте этого.
Расскажите своему другу включить предупреждения в настройках компиляции. Его GCC пытается рассказать ему все это, но он не слушает.
rand()
тоже ужасен . Просто используйте<random>
.