Calculatrice en ligne de commande qui conserve les valeurs fractionnaires

11

Je viens de trouver un bon programme de calculatrice en ligne de commande appelé bc et j'en ai été satisfait jusqu'à ce que je découvre qu'il arrondit les valeurs fractionnaires, provoquant ainsi une perte de précision.

Selon sa manpage:

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 s'il vous plaît suggérer un équivalent de bc pour Ubuntu Maverick? J'ai besoin de faire des calculs avancés en ligne de commande avec des variables.

sergionni
la source

Réponses:

13

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

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

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
Lekensteyn
la source
la valeur d'échelle pourrait-elle être définie comme globale ou devrais-je toujours la définir explicitement whet start bc?
sergionni
1
@sergionni: Vous devez toujours passer la scalevariable à bc. La seule variable d'environnement qui pourrait être utile est BC_ENV_ARGS. Cette variable met certains arguments bc, vous pouvez créer un fichier avec des variables ou des paramètres standard et définir BC_ENV_ARGS=/path/to/variables/file. Veuillez lire la page de manuel .
Lekensteyn
J'ai tendance à démarrer bc via bc -ql. -qmasque la bannière du copyright (ce qui s'avère généralement gênant) et -lcharge la bibliothèque de mathématiques et définit automatiquement l'échelle à 20. (Voir man bc.)
i336_
9

calc(Je crois que du paquet apcalc) fait la même chose bc, mais ne arrondit pas. Il affiche de manière 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
asoundmove
la source
9

Je suggère d'utiliser Python comme calculatrice en ligne de commande:

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

    Return the sine of x (measured in radians).

Je recommanderais également IPython ou IDLE. Les deux améliorent énormément la convivialité de la coque standard.

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

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335
antimirov
la source
La meilleure calculatrice de tous les temps. Tu peux tout faire.
Owais Lone
2
Cela tronque également les calculs.
daithib8
Il ne tronquera rien si vous divisez par exemple comme ceci: 2.0 / 100. Bien sûr, 2/100 serait égal à 0, car c'est une division entière.
user205301
6

Vous avez perdu la précision dans ce sens: si vous définissez la précision sur 10 chiffres décimaux, les divisions sont tronquées sur 10 chiffres décimaux, et c'est un choix cohérent.

Si vous cherchez une calculatrice exacte, vous avez besoin d'un système symbolique comme maxima.

Par ailleurs, bcprend en charge les variables.

enzotib
la source
oui, je sais que ça supporte les variables, c'est que je demande de l'analogique
sergionni
5

"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
Paul Ogilive
la source
1

En voici une bonne:

spigot - une calculatrice réelle exacte en ligne de commande

Jens_G
la source
1

Si vous l'avez octaveinstallé, vous pouvez l'utiliser sur la ligne de commande en tant que:

octave --silent --eval 752/447

Pour raccourcir l'écriture, vous pouvez ajouter ce qui suit comme alias dans .bashrc

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

puis appelez-le comme ose 752/447. L'alias / raccourci est arbitraire mais vous devez redémarrer le terminal pour le rendre efficace.

Vous pouvez installer en octaveutilisant:

sudo apt-get install octave

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

Harris
la source
1

Je viens d'en faire une simple:

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

$ ratio <<< '14/15 * 3'
14/5 
William Casarin
la source
prend-il en charge les variables?
ravery
c'est mort simple en ce moment, juste des expressions basiques. peut-être un jour?
William Casarin
l'OP a spécifié qu'il a besoin de t gérer les variables
ravery