Se outra afirmação envolvendo dois números em notação científica [duplicado]

0

Eu tenho dois números em notação científica e quero fazer alguma comparação entre eles em uma instrução if no bash. Enquanto isso, estou recebendo erro como bwlow: Por exemplo:

bash-4.2$ a=10e-12
bash-4.2$ b=12e-12
bash-4.2$ if (( a > b )); then r=1; else r=0; fi
bash: ((: 10e: value too great for base (error token is "10e")

O mesmo problema não surge se aeb são números inteiros. Eu vejo problema com números flutuantes para se eu usar a declaração acima. Existe uma maneira simples pela qual eu possa fazer a comparação dentro da declaração if?

    
por Pratap 28.04.2016 / 21:05

1 resposta

1

Usando o "awk"

Como o @Theophrastus observou acima, nem bash nem bc suportam a notação científica.

Para comparações e cálculos simples, sugiro usar awk (que lida com números xEy):

a=10e-12
b=12e-12

r=$(awk 'BEGIN{print ('$a'>'$b')?1:0}')
echo $r

Para expressões mais complexas, você pode evitar o incómodo processamento de cotações e escapar passando as variáveis para awk com -v , o que seria, na verdade, a maneira preferida de fazê-lo:

r=$(awk -v a="$a" -v b="$b" 'BEGIN{print (a<b)?1:0}')

Usando "bc"

Existem maneiras de reformatar sua notação para o formato alternativo x * 10 ^ y que é entendido por bc (ou você pode fazer isso sozinho), no entanto bc tem algumas peculiaridades quando se trata de expoentes negativos (como no seu exemplo):

$ bc
10^12
1000000000000
10^-12
0
    
por 28.04.2016 / 22:04