web-dev-qa-db-fra.com

Calculateur en ligne de commande qui conserve les valeurs fractionnaires

Je viens de trouver un bon programme de calculateur en ligne de commande appelé bc et j'en suis satisfait jusqu'à ce que je découvre qu'il arrondit les valeurs fractionnaires, ce qui entraîne une perte de précision.

Selon sa man page:

Tous les nombres sont représentés en interne en décimal et tous les calculs sont effectués en décimal. (Cette version tronque les résultats des opérations de division et de multiplication.)

Pourriez-vous suggérer un équivalent de bc pour Ubuntu Maverick? Je dois effectuer des calculs de ligne de commande avancés avec des variables.

11
sergionni

Vous pouvez définir la longueur de la partie décimale avec scale=n.

La commande echo 'scale=20;752/447' | bc donne:

1.68232662192393736017

Notez que même si le nombre correspond à l'échelle, des zéros supplémentaires peuvent être ajoutés:

scale=20
1/2
.50000000000000000000

Malheureusement, il y a toujours un problème d'arrondi:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999
13
Lekensteyn

calc (je crois que du paquet apcalc) fait la même chose que bc, mais ne arrondit pas. Il affiche un comportement similaire à bc, mais contrairement à bc, il comprend la notation scientifique. Exemple:

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

Comparez avec 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

Une petite recherche donne de nombreux résultats, qui ne sont pas tous pertinents, mais je suis sûr que quelques essais vous permettront d'obtenir exactement ce que vous voulez (wcalc, par exemple):

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

Je suggérerais d'utiliser Python comme calculateur en ligne de commande:

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

    Return the sine of x (measured in radians).

Aussi, je recommanderais IPython ou IDLE. Les deux améliorent énormément la convivialité du shell standard.

Mise à jour: utilisez python3 pour éviter les surprises de troncature:

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335
9
antimirov

Vous avez perdu en précision dans ce sens: si la précision est définie sur 10 chiffres décimaux, les divisions sont tronquées à 10 chiffres décimaux, ce qui constitue un choix cohérent.

Si vous recherchez une calculatrice exacte, vous avez besoin d'un système symbolique tel que maxima.

À propos, bc supporte les variables.

6
enzotib

"genius" est la calculatrice la plus avancée du marché, avec des options de ligne de commande et d'interface graphique disponibles. Consultez le manuel pour plus de détails et consultez http://www.jirka.org/genius.html .

Pour installer, tapez simplement:

Sudo apt-get install genius gnome-genius
5
Paul Ogilive

En voici un bon:

spigot - une calculatrice exacte en ligne de commande

1
Jens_G

Je viens de faire un simple:

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

$ ratio <<< '14/15 * 3'
14/5 
1
William Casarin

Si vous avez installé octave, vous pouvez l'utiliser en ligne de commande en tant que:

octave --silent --eval 752/447

Pour raccourcir l'écriture, vous pouvez ajouter le texte suivant comme alias dans .bashrc

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

puis appelez-le sous le nom ose 752/447. L'alias/raccourci est arbitraire mais vous devez redémarrer le terminal pour qu'il soit efficace.

Vous pouvez installer octave en utilisant:

Sudo apt-get install octave

Bien sûr, avec octave, vous pouvez également utiliser toutes les fonctions avancées disponibles.

1
Harris