Я программирую в ударе. Я возвращаю функцию f, позволяет, говорят f=logn. Я теперь хочу добавить ошибку до 5 процентов к той функции.
Поэтому теперь я использую:
my_log=$(echo "l($i)" | bc -l)
echo $my_log |bc
Однако я хочу возвратиться
my_log=$(echo "l($i)" | bc -l)
error = (a RANDOM NUMBER from 0 to 0.05)*$my_log
echo $my_log+$error |bc
Как я вычисляю это RANDOM NUMBER from 0 to 0.05
?
Случайное число от 0 до 0,05:
rand=$(bc <<< "scale=2; $(printf '0.%02d' $(( $RANDOM % 100))) / 2")
Работа с $RANDOM
непосредственно в Bash, вероятно, возможно, но я просто сдал бы его в аренду на другой язык просто, потому что легче предсказать. Perl, кажется, является самым простым к рэнду и формату.
error=$(perl -e 'printf("%.2f\n", rand()/2)')
Вместо того, чтобы разработать Ваш журнал, затем разрабатывающий ошибку, умноженную на это и включающий его, Вы могли просто добавить 1
к ошибке и умножают первый результат за один шаг:
error=$(perl -e 'printf("%.2f\n", rand()/2 + 1)')
echo "l($i) * $error" | bc -l
Я предполагаю, что существует также аргумент в пользу пребывания на одном языке (вместо того, чтобы плыть на плоскодонке число между вещами как строка). Мы все еще должны передать $i
в, но мы можем обработать остальных в Perl:
export i=2
perl -e 'print log($ENV{i})*(rand()/2+1)'
Bash $RANDOM
генерирует целые числа только, Вы могли использовать /dev/urandom
или /dev/random
.
Вот Python, который один лайнер встраивает в сценарии удара:
#!/usr/bin/env bash
# get a decimal random from the range of 0.0 up to 0.05
result=$(python -c "import random;print(random.uniform(0.0, 0.05))")
# do something with the generated random
echo $result