Resultados errados ao comparar dois números com bc (bash)

1

Encontrei um erro, provavelmente um erro em bc . Eu o encontrei quando tentei comparar dois números em um script no bash. Acontece que quando eu faço:

echo "1.1E-2<1.1E-1" | bc -l

Retorna 1 (como esperado).

Mas quando faço isso por exemplo:

echo "2.1E-2<1.1E-1" | bc -l

Retorna 0 quando deve retornar 1 (porque 0.021 é menor que 0.11).

Estou usando a versão 1.06.95 do bc com o kubuntu 14.04

Alguém encontrou um resultado semelhante? Alguém pode pensar em uma solução alternativa?

    
por juan monti 19.02.2015 / 17:04

2 respostas

3

bc não entende a notação exponencial.

Ele provavelmente interpreta "E" como um dígito hexadecimal, mas em números maiores, parece traduzi-lo para 9 (bug?) e, da mesma forma, para outros dígitos hexadecimais:

bc -l <<< E-4    # 14 - 4
10

bc -l <<< 1E-1   # 19 - 1
18

bc -l <<< F.4E2
9.492
    
por 19.02.2015 / 17:10
1

Sua solução alternativa

    echo "2.1*10^-2<1.1*10^-1" | bc -l

Se o caso que você deseja transformar a saída de outro arquivo, você pode fazer algo semelhante a

    echo "2.1E-2<1.1E-1" | sed 's/E/*10^/g'  | bc -l 

onde, com sed , você substitui E por *10^ que é aceito por bc

    
por 20.02.2015 / 11:51

Tags