BC - multiplicação automática de precisão total

5

Alta, eu preciso testar minha calculadora de precisão arbitrária, e bc parece um bom parâmetro para comparar, no entanto, bc trunca o resultado de cada multiplicação para o que parece ser a escala máxima dos envolvidos operandos cada.

Existe uma maneira rápida de desativar isso ou definir automaticamente a escala de cada multiplicação para a soma das escalas dos fatores, de modo que não perca precisão?

Se você tiver uma solução mais elegante para isso envolvendo algo diferente de bc , agradecemos por compartilhá-lo.

Exemplo:

$ bc <<< '1.5 * 1.5'
2.2

A resposta real é 2,25.

    
por PSkocik 20.06.2013 / 09:57

3 respostas

6

Você pode controlar a escala que bc produz com o argumento scale=<#> .

$ echo "scale=10; 5.1234 * 5.5678" | bc
28.52606652

$ echo "scale=5; 5.1234 * 5.5678" | bc
28.52606

Usando seu exemplo:

$ bc <<< 'scale=2; 1.5 * 1.5'
2.25

Você também pode usar a opção -l (graças a @ manatwork), que inicializará a escala para 20 em vez do padrão 0. Por exemplo:

$ bc -l <<< '1.5 * 1.5'
2.25

$ bc -l <<< '1.52 * 1.52'
2.3104

Você pode ler mais sobre scale na página bc man .

    
por 20.06.2013 / 10:25
1

Tente isto:

$ bc
scale=10
1.5 * 1.5
2.25

Pesquise o homem de bc para a variável de escala

    
por 20.06.2013 / 10:27
0

Eu criei esta função bash que não exibirá zeros à direita

calc () { MAX_PRECISION=20; bc <<< "scale=$MAX_PRECISION; scale = scale($@); $@"; }

Exemplo: calc 1.25^3 = 1.953125

    
por 23.06.2016 / 19:36

Tags