Como o bc é diferente de dc?

26

Quais são as diferenças entre as calculadoras dc e bc ?

Quando devo usar dc e quando bc ?

    
por syntagma 13.04.2014 / 11:30

3 respostas

29

dc é uma ferramenta muito arcaica e um pouco mais antiga que bc . Para citar a página da Wikipédia :

It is one of the oldest Unix utilities, predating even the invention of the C programming language; like other utilities of that vintage, it has a powerful set of features but an extremely terse syntax.

A sintaxe é uma notação de polimento inverso, que basicamente significa que os argumentos (isto é, números) vêm primeiro, seguidos pelo operador. Um exemplo básico do uso de dc é:

echo '3 4 * p' | dc

Onde o p é necessário para imprimir o resultado do cálculo. O bc , por outro lado, usa a notação infixa mais familiar e, portanto, é mais intuitivo de usar. Aqui está um exemplo de bc usage:

echo '3 * 4' | bc

Qual deles usar?

bc é padronizado pelo POSIX e, portanto, é provavelmente o mais portátil dos dois (pelo menos nos sistemas modernos). Se você está fazendo o trabalho de calculadora manual, então é definitivamente a escolha (a menos que você seja um pouco masoquista). O dc ainda pode ter seus usos, aqui é um caso em que a notação polonesa reversa é útil. Imagine que você tenha um programa que produza um fluxo de números que você deseja totalizar, por exemplo:

23
7
90
74
29

Para fazer isso com dc é muito simples (pelo menos com implementações modernas em que cada operador pode receber mais de dois números), pois você só precisa anexar +p ao fluxo, por exemplo:

{ gen_nums; echo +p } | dc

Mas com bc é mais complexo, pois não só precisamos colocar um + entre cada número e garantir que tudo esteja na mesma linha, mas também garantir que haja um nova linha no final:

{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
    
por 13.04.2014 / 11:54
7

Uma diferença básica entre os dois é que dc usa a notação polonesa reversa . Requer comandos explícitos até mesmo para produzir uma saída.

Você pode adicionar dois inteiros em bc dizendo:

bc <<< "2+4"

e produziria 6 em uma linha por si só. No entanto, em dc , você precisa dizer:

dc <<< "2 4 +p"

Você também pode fazer coisas muito divertidas usando dc , por exemplo, consulte minha resposta aqui para produzir

Hello World!

usando dc .

dc<<<"8 9*P101P108P108P111P4 8*P81 6+P111P114P108P100P33P"

    
por 13.04.2014 / 11:51
3

dc é uma calculadora, enquanto bc é um idioma real. Veja as man pages deles.

dc

dc is a reverse-polish desk calculator which supports unlimited precision arithmetic. It also allows you to define and call macros. Normally dc reads from the standard input; if any command arguments are given to it, they are filenames, and dc reads and executes the contents of the files before reading from standard input. All normal output is to standard output; all error output is to standard error.

bc

bc is a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the syntax to the C programming language. A standard math library is available by command line option. If requested, the math library is defined before processing any files. bc starts by processing code from all the files listed on the command line in the order listed. After all files have been processed, bc reads from the standard input. All code is executed as it is read. (If a file contains a command to halt the processor, bc will never read from the standard input.)

Depende realmente do que você está querendo 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 " Solver de expressões de linha de comando? " para alguns exemplos adicionais.

    
por 13.04.2014 / 11:39