Parece que o bc não suporta operações de flutuação, quando faço echo 1/8 | bc
isso obtém um zero.
Eu verifiquei bc (1)
, mas ele nem menciona float
, então eu me pergunto se é suportado?
Parece que o bc não suporta operações de flutuação, quando faço echo 1/8 | bc
isso obtém um zero.
Eu verifiquei bc (1)
, mas ele nem menciona float
, então eu me pergunto se é suportado?
Respostas:
bc
não usa ponto flutuante, mas números decimais de precisão fixos. A -l
bandeira que Hauke menciona carrega uma biblioteca de matemática, por exemplo. funções trigonométricas, mas isso também significa
[...] a escala padrão é 20
scale
é uma das várias "variáveis especiais" mencionadas na página do manual. Você pode configurá-lo:
scale=4
Quando você quiser (se -l
foi usado ou não). Refere-se ao número de dígitos significativos usados em um decimal . Em outras palavras, as soluções subsequentes serão arredondadas para esse número de dígitos após a escala decimal (== precisão fixa).
A escala padrão sans -l
é 0, o que significa arredondado para números inteiros.
A página de manual diz:
Se bc é chamado com a opção -l, uma biblioteca de matemática é pré-carregada [...]
A compreensibilidade disso poderia ser melhorada, de fato ...
1) Os números em bc têm uma escala. A escala de um número não deve ser confundida com o fator de escala. A mesma escala mundial é usada como uma função para consultar a escala de um número ou como um parâmetro para definir o fator de escala.
echo "scale=scale(1.1);11/10" | bc will return 1.1
2) O fator de escala determina quantos dígitos são mantidos à direita do ponto decimal ao executar operações. Se s é o fator de escala atual, sa é a escala do primeiro operando a, sb é a escala do segundo operando b, os resultados são truncados da seguinte maneira:
scale of result
a+b max(sa,sb)
a-b max(sa,sb)
a*b min(sa+sb , max(s,sa,sb))
a/b s
a%b so that a = b*quotient + remainder; remainder has sign of a
a^b min(sa×|b|, max(s,sa)); b must be integer
sqrt(a) max(s,sa)
3) Na origem, bc era um pré-processador de dc. Agora, em muitos sistemas, o bc é um programa independente.
echo "scale=4; 1/8" | bc