Calculadora de línea de comando que mantiene valores fraccionarios

11

Acabo de encontrar un buen programa de calculadora de línea de comandos llamado bc y quedé satisfecho con él hasta que descubrí que redondea los valores fraccionarios, lo que causa pérdida de precisión.

Según su manpágina:

Todos los números se representan internamente en decimal y todos los cálculos se realizan en decimal. (Esta versión trunca los resultados de las operaciones de división y multiplicación).

¿Podría sugerir un equivalente de bc para Ubuntu Maverick? Necesito hacer cálculos avanzados de línea de comando con variables.

sergionni
fuente

Respuestas:

13

Puede establecer la longitud de la parte fraccional con scale=n .

El comando echo 'scale=20;752/447' | bcproduce:

1.68232662192393736017

Tenga en cuenta que incluso si el número se ajusta dentro de la escala, se pueden agregar ceros adicionales:

scale=20
1/2
.50000000000000000000

Desafortunadamente, siempre hay un problema de redondeo:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999
Lekensteyn
fuente
¿podría establecerse el valor de la escala como global o siempre debería establecerlo explícitamente cuando comience bc?
sergionni
1
@sergionni: siempre debe pasar la scalevariable a bc. La única variable de entorno que podría ser útil es BC_ENV_ARGS. Esta variable pone algunos argumentos en bc, podría crear un archivo con variables o configuraciones estándar y establecer BC_ENV_ARGS=/path/to/variables/file. Por favor lea la página del manual .
Lekensteyn
Tiendo a comenzar a través de bc bc -ql. -qoculta el banner de derechos de autor (que generalmente demuestra distracción) y -lcarga la biblioteca matemática y establece automáticamente la escala en 20. (Ver man bc.)
i336_
9

calc(Creo que del paquete apcalc) hace lo mismo bcpero no se redondea. Se muestra de forma similar a bc, pero a diferencia bc, comprende la notación científica. Ejemplo:

> 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
; 

Comparar con 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

Una pequeña búsqueda arroja muchos resultados, no todos los cuales son relevantes, pero estoy seguro de que algunas pruebas te darán exactamente lo que quieres (wcalc, por ejemplo):

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
asoundmove
fuente
9

Sugeriría usar Python como una calculadora de línea de comandos:

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

    Return the sine of x (measured in radians).

También recomendaría IPython o IDLE. Ambos mejoran enormemente la usabilidad del shell estándar.

Actualización : use python3 para evitar sorpresas de truncamiento:

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335
antimirov
fuente
La mejor calculadora de todas. Podrías hacer cualquier cosa.
Owais Lone
2
Eso también trunca los cálculos.
daithib8
No se truncará nada si divide, por ejemplo, así: 2.0 / 100. Por supuesto, 2/100 sería igual a 0, porque es una división entera.
user205301
6

Perdió precisión en este sentido: si establece la precisión en 10 dígitos decimales, las divisiones se truncan en 10 dígitos decimales, y esta es una opción coherente.

Si busca una calculadora exacta, necesita un sistema simbólico como maxima .

Por cierto, bcadmite variables.

enzotib
fuente
sí, sé que admite variables, eso es lo que estoy pidiendo para analógico
sergionni
5

"genio" es la calculadora más avanzada que existe, con opciones de línea de comandos y GUI disponibles. Consulte el manual para obtener más detalles y consulte http://www.jirka.org/genius.html .

Para instalar, simplemente escriba:

sudo apt-get install genius gnome-genius
Paul Ogilive
fuente
1

Aqui hay uno bueno:

espita - una calculadora real exacta de línea de comandos

Jens_G
fuente
1

Si lo ha octaveinstalado, puede usarlo en la línea de comando como:

octave --silent --eval 752/447

Para acortar la escritura, puede agregar lo siguiente como alias en .bashrc

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

y luego llamarlo como ose 752/447. El alias / acceso directo es arbitrario, pero debe reiniciar el terminal para que sea efectivo.

Puede instalar octaveusando:

sudo apt-get install octave

Por supuesto, con octaveusted puede usar todas las funciones avanzadas disponibles en él también.

Harris
fuente
1

Acabo de hacer uno simple:

https://github.com/jb55/ratio-cli

$ ratio <<< '14/15 * 3'
14/5 
William Casarin
fuente
¿admite variables?
ravery
Es muy simple en este momento, solo expresiones básicas. ¿tal vez algun dia?
William Casarin
el OP especificó que necesita manejar variables
ravery