Alto, 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 operandos envolvidos.
Existe uma maneira rápida de desativar isso ou definir automaticamente a escala de cada multiplicação para a soma das escalas dos fatores, para que não perca precisão?
Se você tiver uma solução mais elegante para isso envolvendo algo diferente bc
, agradeceria por compartilhar.
Exemplo:
$ bc <<< '1.5 * 1.5'
2.2
A resposta real é 2,25.
bc
calculator
PSkocik
fonte
fonte
Respostas:
Você pode controlar a escala que
bc
sai com oscale=<#>
argumento.Usando seu exemplo:
Você também pode usar a
-l
opção (graças a @manatwork) que inicializará a escala para 20 em vez do padrão de 0. Por exemplo:Você pode ler mais sobre
scale
nabc
página de manual .fonte
bc -l
. “ -L (A carta ell.) Definir as funções matemáticas e escala initialize a 20, em vez de zero defeito” -bc
especificaçãomin(max(sx,sy,scale),sx+sy)
ondesx
esy
são as escalas dex
ey
emx*y
. A configuraçãoscale=scale(x)+scale(y)
fornecerá a precisão máxima necessária. Definir a escala para um número maior (como 1000) não aumentará a escala do resultado. A variável de escala afeta apenas s diretamente. O resultado da divisãoscale=1000; a/1
criará um resultado com 1000 dígitos decimais (após o ponto), independentemente da escala de a anterior.Tente o seguinte:
Pesquise bc's man pela variável scale
fonte
Eu criei essa função bash que não exibirá zeros à direita
Exemplo:
calc 1.25^3
= 1.953125fonte