Pode bash fazer aritmética de ponto flutuante sem usar um comando externo? [duplicado]

7

Eu li que bash pode fazer aritmética inteira sem usar um comando externo, por exemplo:

echo "$((3 * (2 + 1)))"

Pode bash também fazer aritmética de ponto flutuante sem usar um comando externo?

    
por user267288 23.12.2017 / 21:11

2 respostas

14

Não.

Bash não pode realizar aritmética de ponto flutuante nativamente.

Não é isso que você está procurando, mas pode ajudar alguém:

Alternativas

  1. bc

bc permite aritmética de ponto flutuante e pode até converter números inteiros em ponto flutuante definindo o valor scale . (Observe que o valor scale afeta apenas a divisão em bc , mas uma solução alternativa para isso é finalizar qualquer fórmula com divisão por 1)

$ echo '10.1 / 1.1' | bc -l
9.18181818181818181818
$ echo '55 * 0.111111' | bc -l
6.111105
$ echo 'scale=4; 1 + 1' | bc -l
2
$ echo 'scale=4; 1 + 1 / 1' | bc -l
2.0000
  1. awk

awk é uma linguagem de programação em si, mas é facilmente aproveitada para executar aritmética de ponto flutuante em seus scripts bash, mas isso não é tudo que pode fazer!

echo | awk '{print 10.1 / 1.1}'
9.18182
$ awk 'BEGIN{print 55 * 0.111111}'
6.11111
$ echo | awk '{print log(100)}'
4.60517
$ awk 'BEGIN{print sqrt(100)}'
10

Usei echo canalizado para awk e BEGIN para mostrar duas maneiras de fazer isso. Qualquer coisa dentro de uma instrução awk BEGIN será executada antes que a entrada seja lida, no entanto, sem entrada ou uma instrução BEGIN, awk não executaria, portanto, será necessário alimentá-la.

  1. Perl

Outra linguagem de programação que pode ser aproveitada em um script bash.

$ perl -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(perl -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
  1. Python

Outra linguagem de programação que pode ser aproveitada em um script bash.

$ python -c 'print 10.1 / 1.1'
9.18181818182
$ somevar="$(python -c 'print 55 * 0.111111')"; echo "$somevar"
6.111105
  1. Ruby

Outra linguagem de programação que pode ser aproveitada em um script bash.

$ ruby -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(ruby -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
    
por 23.12.2017 / 21:18
2

"O bash também pode fazer aritmética de ponto flutuante sem usar um comando externo?"

Não.

robert@pip2:/tmp$ echo $((2.5 * 3))
bash: 2.5 * 3: syntax error: invalid arithmetic operator (error token is ".5 * 3")
    
por 23.12.2017 / 21:32