Calculadora de linha de comando que mantém valores fracionários

11

Acabei de encontrar um bom programa de calculadora de linha de comando chamado bc e fiquei satisfeito com ele até que descobri que ele arredonda valores fracionários, causando perda de precisão.

De acordo com a sua página man :

  

Todos os números estão representados   internamente em decimal e          todo cálculo é feito em decimal. (Esta versão trunca   resultados          das operações de divisão e multiplicação.)

Poderia sugerir um equivalente de bc para o Ubuntu Maverick? Eu preciso fazer cálculos avançados de linha de comando com variáveis.

    
por sergionni 17.04.2011 / 15:26

8 respostas

13

Você pode definir o tamanho da parte fracionária com scale=n .

O comando echo 'scale=20;752/447' | bc produz:

1.68232662192393736017

Observe que, mesmo que o número caiba dentro da escala, zeros adicionais podem ser acrescentados:

scale=20
1/2
.50000000000000000000

Infelizmente, há sempre um problema de arredondamento:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999
    
por Lekensteyn 17.04.2011 / 15:37
9

calc (acredito que do pacote apcalc ) faz o mesmo que bc , mas não arredonda. Ele é exibido de forma semelhante a bc , mas ao contrário de bc , ele entende a notação científica. Exemplo:

> calc
C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; a=234
; b=a/7
; b
    ~33.42857142857142857143
; c=b/1e20
; c
    ~0.00000000000000000033
; c*1e10
    ~0.00000000334285714286
; 

Compare com bc :

> bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'. 
a=234
b=a/7
b
33.42857142857142857142
c=b/10^20
c
.00000000000000000033
c*1e10
(standard_in) 6: syntax error
c*10^10
.00000000330000000000

Uma pequena pesquisa mostra muitos resultados, nem todos relevantes, mas tenho certeza de que algumas tentativas vão te dar exatamente o que você quer (wcalc, por exemplo):

aptitude search calc
i   apcalc                               - Arbitrary precision calculator (original name: calc)
i A apcalc-common                        - Arbitrary precision calculator (common files)
p   apcalc-dev                           - Library for arbitrary precision arithmetic
p   bandwidthcalc                        - file transfer time calculator written in GTK+
p   calcoo                               - Scientific calculator (GTK+)
p   calcurse                             - text-based calendar and todo manager
p   concalc                              - console calculator
p   extcalc                              - multifunctional scientific graphic calculator
p   gcalcli                              - Google Calendar Command Line Interface
i   gcalctool                            - GNOME desktop calculator
p   ipcalc                               - parameter calculator for IPv4 addresses
p   ipv6calc                             - small utility for manipulating IPv6 addresses
p   kcalc                                - calculator for KDE 4
p   keurocalc                            - universal currency converter and calculator - binary package
p   keurocalc-data                       - universal currency converter and calculator - data package
p   lcalc                                - a program for calculating with L-functions
p   libcolor-calc-perl                   - Perl module for simple calculations with RGB colors
p   libdate-calc-perl                    - Perl library for accessing dates
p   libdate-pcalc-perl                   - Perl module for Gregorian calendar date calculations
p   libmath-basecalc-perl                - Convert numbers between various bases
p   libmath-calc-units-perl              - Human-readable unit-aware calculator
p   libmath-calculus-differentiate-perl  - Algebraic Differentiation Engine
p   libmath-calculus-expression-perl     - Algebraic Calculus Tools Expression Class
p   libmath-calculus-newtonraphson-perl  - Algebraic Newton Raphson Implementation
p   libticalcs-dev                       - Texas Instruments calculator communication library [development files]
p   libticalcs2-7                        - Texas Instruments calculator communication library
p   libwww-google-calculator-perl        - Perl interface for Google calculator
p   octave-physicalconstants             - provide physical constants values in Octave
i   openoffice.org-calc                  - office productivity suite -- spreadsheet
v   openoffice.org2-calc                 -
p   python-ipcalc                        - perform IP subnet calculations
v   python2.6-ipcalc                     -
p   r-cran-epicalc                       - GNU R Epidemiological calculator
p   rpncalc                              - RPN calculator trying to emulate an HP28S
p   science-numericalcomputation         - Debian Science Numerical Computation packages
p   sipcalc                              - Advanced console-based ip subnet calculator
p   subnetcalc                           - IPv4/IPv6 Subnet Calculator
p   sugar-calculate-activity             - calculate activity for the Sugar graphical shell
p   tapecalc                             - a full-screen tape editor that lets the user edit a calculation
p   transcalc                            - microwave and RF transmission line calculator
p   wcalc                                - A flexible command-line scientific calculator
p   wmcalclock                           - A dock.app which simply tells time and date
p   xsmc-calc                            - Smith Chart calculator for X
    
por asoundmove 17.04.2011 / 17:25
9

Eu sugeriria usar o Python como uma calculadora de linha de comando:

$ python
>>> from math import *
>>> help(sin)
    sin(x)

    Return the sine of x (measured in radians).

Além disso, recomendo o IPython ou o IDLE. Ambas melhoram enormemente a usabilidade do shell padrão.

Atualizar : use o python3 para evitar surpresas no truncamento:

$ python3

  
    
      

10/3       3,33333333333333335

    
  
    
por antimirov 17.04.2011 / 17:59
6

Você perdeu precisão nesse sentido: se definir precisão para 10 dígitos decimais, as divisões serão truncadas para 10 dígitos decimais, e essa é uma escolha coerente.

Se você procurar uma calculadora exata, precisará de um sistema simbólico como maxima .

A propósito, bc suporta variáveis.

    
por enzotib 17.04.2011 / 15:34
5

"genius" é a calculadora mais avançada disponível, com opções de linha de comando e GUI disponíveis. Consulte o manual para obter detalhes e consulte o link .

Para instalar, basta digitar:

sudo apt-get install genius gnome-genius
    
por Paul Ogilive 12.02.2013 / 06:30
1

Aqui está uma boa:

spigot - uma calculadora real exata da linha de comando

    
por Jens_G 01.04.2015 / 12:23
1

Se você tiver octave instalado, poderá usá-lo na linha de comando como:

octave --silent --eval 752/447

Para encurtar a escrita, você pode adicionar o seguinte como alias em .bashrc

alias ose='octave --silent --eval'

e, em seguida, chamá-lo como ose 752/447 . O alias / atalho é arbitrário, mas você precisa reiniciar o terminal para torná-lo efetivo.

Você pode instalar octave usando:

sudo apt-get install octave

Claro, com octave você também pode usar todas as funções avançadas disponíveis.

    
por Harris 01.04.2015 / 20:03
1

Acabei de fazer uma simples:

link

$ ratio <<< '14/15 * 3'
14/5 
    
por William Casarin 10.10.2017 / 05:25