Dividindo com o Gnu's bc

5

Estou apenas começando com o Gnu's bc e estou preso no começo (muito desencorajador ...). Eu quero dividir dois números e obter um float como resultado:

$bc
bc 1.06.94
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'. 

15/12
1
15.0/12.0
1
15.000000/12.000000
1
scale(15.00000)
5

A man page diz que a divisão retorna um número com a mesma escala dos valores iniciais. Obviamente, isso não é verdade ou estou perdendo alguma coisa.

O uso do Google não trouxe nenhum novo insight (além disso, 'BC' também pode representar 'British Columbia').

Você vê meu erro? Melhor ainda, você conhece alguma boa referência / tutorial para bc?

    
por Boldewyn 18.12.2009 / 12:03

4 respostas

7

Você pode definir a escala com

scale=2

A divisão funciona conforme o esperado:

scale=2
15/12
1.25

Para citar a Wikipédia:

All numbers and variable contents are arbitrary precision numbers whose precision (in decimal places) is determined by the global scale variable.

    
por 18.12.2009 / 12:38
7

Use bc -l, que pré-carrega a biblioteca matemática e a escala padrão é configurada para 20.

$ 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'. 
4/3
1.33333333333333333333
    
por 21.11.2012 / 16:39
1

Caso isso ajude alguém, eu estava tentando obter scale=2 e modo silencioso definido por padrão e não conseguia acertar.

Se eu definir BC_ENV_VARS="-q" , eu tenho o modo silencioso e se eu definir BC_ENV_VARS="~/.bcrc" , eu poderia definir scale=2 neste arquivo, mas não consegui ativar o modo silencioso (talvez haja um jeito, mas não consegui não o encontre).

No final, usei export BC_ENV_ARGS=~/.bcrc (com scale=2 ) e aliased bc to bc -q .

    
por 10.03.2012 / 23:51
1

Para expandir em Colin_Daly, use BC_ENV_ARGS="-q $HOME/.bcrc" , com scale=INT em .bcrc obviamente. A variável de ambiente basicamente fica logo após o comando bc .

O que está acontecendo é que -q é apenas uma opção de linha de comando normal, e $HOME/.bcrc é expandido e alimentado em bc como o primeiro argumento file (pode haver vários argumentos de arquivo). scale=INT é uma linha de bc, que é uma linguagem de programação. É funcionalmente equivalente a executar bc e digitar scale=INT no prompt bc. Você tem que usar $ HOME e não ~ porque ~ só é reconhecido quando não está entre aspas (veja aqui ), mas precisamos de algum tipo de cotação para que a variável seja definida para ambas as palavras, não apenas para o espaço.

    
por 19.04.2013 / 20:52