De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Tudo o que você sempre quis saber sobre o comando bc mas ...

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 29 de Julho de 2003

O bc (ver manual;)) é no final das contas uma linguagem de programação, junto com o pacote fonte tem uma série de exemplos de programas implementados nesta linguagem.

Mas e para uso imediato, sem precisar programação, que "guloseimas" a mais nós temos disponíveis? Segundo o manual:

       -l, --mathlib
              Define the standard math library.

Ahá !! Se usarmos o parâmetro -l vamos ter um conjunto extra de funcionalidade disponível :

$ bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
# função seno

s(30*3.14159265/180)
.49999999948185797677

# função cosseno
c(60*3.14159265/180)
.50000000103628404592

#função arco-tangente
pi=4*a(1)
pi
3.14159265358979323844

# pi !!!  ;))
# Mas eu quero mais dígitos
scale=50
pi=4*a(1)
pi
3.14159265358979323846264338327950288419716939937508

# Mas eu quero lidar com dinheiro, que só tem duas casas decimais
scale=2
7/3
2.33

As funções pré-definidas são :

       s (x)  The sine of x, x is in radians.
       c (x)  The cosine of x, x is in radians.
       a (x)  The arctangent of x, arctangent returns radians.
       l (x)  The natural logarithm of x.
       e (x)  The exponential function of raising e to the value x.
       j (n,x)
              The bessel function of integer order n of x.

Mas nada impede de se definir novas funções. Na página do manual tem exemplos bem claros, dentre eles a definição de uma função e(x).

Para simplificar a minha vida eu coloquei no meu .profile (use no .bashrc se você usa só o Bash no Linux) uma linha :

alias bc='bc -l'

Desta forma quando eu chamo o bc ele já carrega as funções por default.

Acabou? Não, tem muito mais. Para o pessoal de TI que eventualmente precisa fazer conversões de base o bc é uma excelente ferramenta :

$ bc
obase=16
2003
7D3

#  Mas e para entrar com hexadecimal ?
ibase=16
# saida em binário
obase=2
7D3
11111010011

# Voltando para saída em base 10 ?
obase=10
7D3
7D3

# Ué ?!!  Não pedimos saída na base 10 ?  Não, como
# a entrada é base 16 "10" representa a própria
# base, portanto "16(decimal)".  Para ter a saída
# na base "10(decimal)" precisamos especificar na
# base de entrada corrente

obase=A
7D3
2003

# Para voltar a entrada para base "10(decimal)"
# precisamos usar o mesmo procedimento

ibase=A
2003
2003

Como a base corrente é sempre representada como 10, qualquer que seja ela, usar ibase=10 não altera nada.

Tem mais ? Tem, mas vou deixar para uma leitura da página do manual. ;))

Roxo

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Fernando M. Roxo da Motta