você está aqui: Home  → Arquivo de Mensagens

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



 

 

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

Opinião dos Leitores

avanildo
11 Ago 2010, 07:38
Materia muito boa, visto que trabalhar com inteiro e mais
facíl, mas agora podemos trabalhar com ponto flutuante também parabens pela materia
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script