我正在用 Bash 编程。我返回一个函数 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
从 0 到 0.05 的随机数:
rand=$(bc <<< "scale=2; $(printf '0.%02d' $(( $RANDOM % 100))) / 2")
答案2
直接在 Bash 中使用$RANDOM
可能是可行的,但我只是将其外包给另一种语言,因为它更容易预测。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)'
答案3
Bash$RANDOM
只生成整数,您可以使用/dev/urandom
或/dev/random
。
以下是嵌入在 Bash 脚本中的 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