Cria um número decimal aleatório no bash

1

Estou programando no bash. Eu retorno uma função f, digamos f = logn. Agora quero adicionar um erro de até 5% a essa função.

Portanto, agora eu uso:

my_log=$(echo "l($i)" | bc -l)
echo $my_log |bc 

No entanto, quero retornar

my_log=$(echo "l($i)" | bc -l)
error = (a RANDOM NUMBER from 0 to 0.05)*$my_log
echo $my_log+$error |bc 

Como faço para calcular que RANDOM NUMBER from 0 to 0.05 ?

    
por Jim Blum 07.07.2014 / 11:30

3 respostas

2

Trabalhar com o $RANDOM diretamente no Bash provavelmente é possível, mas eu o criaria em outro idioma apenas porque é mais fácil de prever. O Perl parece ser o mais simples de ler e formatar.

error=$(perl -e 'printf("%.2f\n", rand()/2)')

Em vez de calcular o log, em seguida, calcular um erro multiplicado por isso e adicioná-lo, basta adicionar 1 ao erro e multiplicar o primeiro resultado em uma etapa:

error=$(perl -e 'printf("%.2f\n", rand()/2 + 1)')
echo "l($i) * $error" | bc -l

Eu acho que há também um argumento para ficar em um idioma (ao invés de puncionar um número entre as coisas como uma string). Ainda temos que passar $i , mas podemos lidar com o resto em Perl:

export i=2
perl -e 'print log($ENV{i})*(rand()/2+1)'
    
por Oli 07.07.2014 / 11:53
1

Um número aleatório de 0 a 0,05:

rand=$(bc <<< "scale=2; $(printf '0.%02d' $(( $RANDOM % 100))) / 2")
    
por Radu Rădeanu 07.07.2014 / 12:24
0

Bash $RANDOM gera somente números inteiros, você pode usar /dev/urandom ou /dev/random .

Aqui está um liner de Python inserido dentro de um script bash:

#!/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
    
por Stef K 07.07.2014 / 12:26