在 bash 中创建一个随机十进制数

在 bash 中创建一个随机十进制数

我正在用 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

相关内容