Еще один способ создания случайных чисел

0

Эффективным способом создания случайных чисел в 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.

  • 9
    Это ужасно. Он зависит от того, какие значения мусора были оставлены предыдущим использованием, и в режиме отладки вполне может быть все время 0 (некоторые отладчики 0 инициализируют int). При этом, rand() тоже ужасен . Просто используйте <random> .
  • 0
    почему бы вам не попробовать распечатать значение в цикле, где включена оптимизация.
Показать ещё 6 комментариев
Теги:

2 ответа

6

Редко видеть что-то хуже.

У вас есть неопределенное поведение, так как вы используете неинициализированную переменную.

И использование модуля приводит к статистическому смещению.

4

Ваш друг неправильно понял неинициализированные переменные.

Игнорируя на мгновение, что чтение из них не определено и может, таким образом, сделать что угодно, если вы притворитесь, что они будут безопасно давать произвольное значение, тогда вам нужно помнить, что произвольное не означает случайное.

Этот подход имеет место между минимальным и никаким случайным распределением значений. Таким образом, вы не сможете предсказать, что вы вернете, но это не делает его полезным "случайным" в каком-либо значимом смысле.

Также, применяя % руины любого дистрибутива, так и не делайте этого.

Расскажите своему другу включить предупреждения в настройках компиляции. Его GCC пытается рассказать ему все это, но он не слушает.

  • 0
    +1 для объяснения, почему более подробно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню