so.c в 15 символов :
main(){main();}
Результат:
antti@blah:~$ gcc so.c -o so
antti@blah:~$ ./so
Segmentation fault (core dumped)
Редактирование : Хорошо, это дает предупреждения с - Стена и не вызывает переполнение стека с-O2. Но это работает!
Если вы хотите (псевдо-) равномерное распределение (с равными интервалами) между 0,9 и 1,1, то будет работать следующее:
range = 0.2
return 1-range/2+rand(100)*range/100
Отрегулируйте диапазон соответствующим образом.
Если вам нужно нормальное распределение (кривая колокола), вам понадобится специальный код, который будет зависеть от языка / библиотеки. Вы можете получить точное приближение с помощью этого кода:
sd = 0.1
mean = 1
count = 10
sum = 0
for(int i=1; i<count; i++)
sum=sum+(rand(100)-50)
}
normal = sum / count
normal = normal*sd + mean
Вам нужен диапазон от -1 до 1 в качестве вывода вашего выражения rand ().
( rand(2) - 1 )
Затем масштабируйте диапазон от -1 до 1 по мере необходимости. Скажем, для варианта .1 с любой стороны:
(( rand(2) - 1 ) / 10 )
Затем просто добавьте один.
(( rand(2) - 1 ) / 10 ) + 1
Разделите на 100 и прибавьте 1. (Полагаю, вы ищете диапазон от 0 до 2?)
low + (random () / 100) * range
Например:
0.90 + (random () / 100) * 0,2
Если rand () возвращает случайное число от 0 до 100, все, что вам нужно сделать, это:
(rand() / 100) * 2
, чтобы получить случайное число от 0 до 2.
Если на С другой стороны, вам нужен диапазон от 0,9 до 1,1, используйте следующее:
0.9 + ((rand() / 100) * 0.2)