Quais são as diferenças entre dc
e bc
calculadoras?
Quando devo usar dc
e quando bc
?
command-line
bc
calculator
sintagma
fonte
fonte
expr
com frequência para cálculos simples na linha de comando e em scripts.Respostas:
dc
é uma ferramenta muito arcaica e um pouco mais antiga quebc
. Para citar a página da Wikipedia :A sintaxe é uma notação de polimento reverso, o que basicamente significa que os argumentos (ou seja, números) vêm primeiro, seguidos pelo operador. Um exemplo básico do
dc
uso é:Onde
p
é necessário imprimir o resultado do cálculo.bc
por outro lado, usa a notação infix mais familiar e, portanto, é mais intuitivo de usar. Aqui está um exemplo debc
uso:Qual usar?
bc
é padronizado pelo POSIX e, portanto, é provavelmente o mais portátil dos dois (pelo menos nos sistemas modernos). Se você estiver trabalhando com uma calculadora manual, é definitivamente a escolha (a menos que você seja um masoquista).dc
ainda pode ter seus usos, aqui está um caso em que a notação de polimento reverso é útil. Imagine que você tem um programa que gera um fluxo de números que você deseja totalizar, por exemplo:To do this with
dc
is very simple (at least with modern implementations where each operator can take more than two numbers) since you only have to append a+p
to the stream, eg:Mas com
bc
isso é mais complexo, pois precisamos não apenas colocar um+
entre cada número e garantir que tudo esteja na mesma linha, mas também garantir que haja uma nova linha no final:fonte
gen_nums
exemplo terrivelmente complexo usandobc
. Pode ser simplificada para:gen_nums | paste -sd+ | bc
bc
era apenas uma ferramenta de front-end que compilava abc
notaçãodc
e a canalizavadc
para obter o resultado. No FreeBSD ainda existe o-c
sinalizador para obc
qual você ainda pode compilar com adc
notação. For example
eco '3 * 4' | bc` é igual aecho '3 * 4' | bc -c | dc
. Veja linux.die.net/man/1/bc e freebsd.org/cgi/man.cgi?query=bc&sektion=1dc
você está usando? No Ubuntu 14.04 e OS X, o+
operador sempre opera com exatamente dois valores fora da pilhadc
uso:gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'
. Este script paradc
lê e adiciona números um a um no loop e depois imprime o resultado. Veja a nota sobre números negativos.bc -c
faz algo estranho e diferente (e o-c
bandeira não é documentada). Se eu tentar canalizá-lodc
, recebo vários erros (e a saída sem canalizardc
é muito enigmática@iK3:K4:*W@r\n@i
).Uma diferença básica entre os dois é que
dc
usa a notação polonesa reversa . Requer comandos explícitos mesmo para produzir uma saída.Você pode adicionar dois números inteiros
bc
dizendo:e produziria
6
em uma linha por si só. No entanto,dc
você precisa dizer:Você também pode fazer muita coisa divertida usando
dc
, por exemplo, consulte a minha resposta aqui para produzirusando
dc
.fonte
dc bcdc
é uma calculadora enquantobc
é uma linguagem real. Veja suas páginas de manual.Realmente depende do que você quer fazer matematicamente. Algumas operações não são possíveis usando
dc
. Eu usei os dois ao longo dos anos, além de várias outras ferramentas de calculadora de linha de comando. Consulte " Solucionador de expressões de linha de comando? " Para obter alguns exemplos adicionais.fonte
dc
ser uma calculadora de notação de polimento reverso, e como sempre usei calculadoras de notação de polimento reverso da HP, prefiro usádc
-lo,bc
mas eu diria que elas ainda são usadas sempre que você precisar executar um cálculo matemático complexo. Costumo usá-los para converter números entre a base 10 e a base 16 e a base 2. Mas os usei para registrar colunas em dados tabulares e também de um script AWK.bc
era uma linguagem no sentido de tornardc
amigável ao ser humano - não que fosse mais poderosa. Estes dias os aplicativos compartilhar libs, masbc
foi chamado de linguagem edc
uma calculadora porquedc
fez matemática ebc
falou matemática - adc
. Aqui está umaman
página antiga : Uma linguagem chamadaBC
[1] foi desenvolvida que aceita programas escritos em linguagens de nível superior e compila a saída que é interpretada pelo DC. Alguns dos comandos descritos abaixo foram projetados para a interface do compilador e não são fáceis para um usuário humano manipular.dc
também é uma linguagem. por exemplo, codegolf.stackexchange.com/a/47921/11259Na minha humilde opinião e com o mínimo de palavras possível, o GNU dc difere do GNU bc de três maneiras:
1) Se a biblioteca de matemática da bc estiver preocupada, salve o máximo de teclas possível (nas palavras de Jan Łukasiewicz: uma notação sem parênteses) ao fazer aritmética elementar, para se concentrar mais no essencial e para evitar distrações.
2) Na linha de comando do Microsoft Windows 7, o GNU dc consome menos memória (~ 320K) do que o GNU bc (~ 360K).
3) Muito controle granular no GNU dc do que no GNU bc, por exemplo, comandos de pilha e registro estão ausentes no GNU bc.
A versão 1.07.1 win32 para ambos está em https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
fonte