Создайте случайное десятичное число в ударе

Я программирую в ударе. Я возвращаю функцию 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?

1
задан 7 July 2014 в 13:30

3 ответа

Случайное число от 0 до 0,05:

rand=$(bc <<< "scale=2; $(printf '0.%02d' $(( $RANDOM % 100))) / 2")
3
ответ дан 3 December 2019 в 06:42

Работа с $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)'
2
ответ дан 3 December 2019 в 06:42

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
0
ответ дан 3 December 2019 в 06:42

Другие вопросы по тегам:

Похожие вопросы: