Solutionneur d'expression de ligne de commande?

8

Je recherche une calculatrice basée sur TTY compatible Linux. Par exemple:

user@host:~$ calculate
> 2
2
user@host:~$ calculate
> 8*6-4
44
user@host:~$ calculate
> 8*(6-4)
16

Y a-t-il quelque chose comme ça qui prend en charge les opérations de base, certaines fonctions intégrées comme atan(), et éventuellement des fonctions personnalisées via les scripts?

Lucas Phillips
la source

Réponses:

7

bc & dc

bcet dcsont les 2 calculatrices que j'utiliserai souvent lorsque j'aurai besoin d'un accès depuis un terminal.

Exemples

$ bc
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'. 

Ensuite, vous pouvez taper vos questions:

2
2
5+5
10

Lorsque vous avez terminé, vous pouvez sortir avec un Ctrl+ C.

Essai

Ces calculatrices sont assez riches en fonctionnalités.

mise à l'échelle

scale=5
193 * 1/3
64.33333

équations

principal=100
ir = 0.05
years = 5
futurevalue = principal * (1 + ir)^years

futurevalue
127.62800

vos exemples

8*6-4
44

8*(6-4)
16

calc

Si vous voulez quelque chose d'un peu plus interactif, il y en a calc.

Exemple

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

; 10+10
20
; 8*6-4
    44
; 8*(6-4)
    16
; 

Vous pouvez utiliser les flèches haut / bas pour parcourir les commandes passées et il dispose également d'une aide interactive.

; help

Vous donne ceci:

For more information while running calc, type  help  followed by one of the
following topics:

    topic               description
    -----               -----------
    intro               introduction to calc
    overview            overview of calc
    help                this file

    assoc               using associations
    builtin             builtin functions
    command             top level commands
    config              configuration parameters
    custom              information about the custom builtin interface
    define              how to define functions
    environment         how environment variables effect calc
    errorcodes          calc generated error codes
    expression          expression sequences
    file                using files
    history             command history
    interrupt           how interrupts are handled
    list                using lists
    mat                 using matrices
    ...

Références

slm
la source
Puisque ce n'est pas une question spécifique à Ubuntu, peut-être un lien vers calc en amont plutôt que vers le paquet Ubuntu?
mattdm
@mattdm - merci d'avoir ajouté ce lien, j'ai laissé l'autre lien simplement b / c que je faisais un lien vers une page de manuel sur calc, pas nécessairement le paquet ubuntu.
slm
6

Il y a beaucoup de réponses à votre question ...

Les plus simples que vous pourriez faire dans le shell.

$ echo $((8*(6-4)))
16

Il existe un programme dédié bc.

$ echo "8*(6-4)" | bc
16

Des fonctions personnalisées via des scripts? Eh bien, les scripts shell et bc les ont tous les deux, en quelque sorte. Cela dépend jusqu'où vous voulez aller.

Pourquoi pas Python? C'est facile à apprendre.

$ python
>>> from math import atan
>>> 8*(6-4)+atan(0)
16.0
frostschutz
la source
J'ai utilisé Python pour cela récemment, mais c'est la raison pour laquelle je veux autre chose. Il devient ennuyeux d'avoir à importer quelque chose pour chaque fonction. J'espérais plus pour quelque chose de autonome, comme Speedcrunch ( i.imgur.com/Cn6GejG.png ), mais en ligne de commande évidemment.
Lucas Phillips
1
Vous pouvez résoudre le problème d'importation en définissant la variable d'environnement PYTHONSTARTUP et en préimportant des éléments dans le fichier pointé par la variable.
mkc
5

Dans zsh:

$ autoload zcalc  # best in ~/.zshrc
$ zcalc
1> 8*(6-4)
16
2> $1*2
32
Stéphane Chazelas
la source
4

insecte a des versions Web et terminales:

exemple d'utilisation d'insectes

shark.dp
la source
2

Maxima CAS :

  • peut être exécuté à partir de la console (a également des versions de fenêtres comme wxMaxima
  • prend en charge les scripts ( fichier texte batch avec extension mac )
  • a de nombreuses fonctions intégrées
   L (t): = exp (% i * t * 2 *% pi); / * cercle unitaire paramétré avec angle en tours * /
   plot2d (
   [atan2 (imagpart (L (x)), realpart (L (x)))],
   [x, 0,1],
   [y, -2 *% pi, 2 *% pi],
   [plot_format, gnuplot],
   [gnuplot_term, "png"],
   [gnuplot_out_file, "atan2.png"],
   [légende, "atan2"],
   [xlabel, "angle en radians"], 
   [ylabel, "angle en radians"],
   [gnuplot_preamble, "
   mettre la clé en haut à gauche;
   set xtics ('pi / 2' 0,25, 'pi' 0,5, '3pi / 2' 0,75, '2pi' 1,0);
   définir les jics ('-2pi' -6,283, '-pi' -3,1415, '-pi / 2' -1,5708, '0' 0, 'pi / 2' 1,5708, 'pi' 3,1415, '2pi' 6,283);
   définir la grille xtics ytics "]
  );

HTH

Adam
la source
1

Voici un petit hack bash qui vous permettra de faire des calculs simples directement sur la ligne de commande.

alias calc='set -o noglob; docalc'
function docalc { perl -e "print STDOUT $*, \"\\n\""; set +o noglob; }

Ensuite, vous pouvez faire, par exemple,

calc 3 * 15 + 5

Malheureusement, cela ne fonctionne pas bien avec les parenthèses. (Si je me souviens bien, vous pouvez aussi demander à tcsh de les accepter, mais je n'ai pas pu persuader bash de le faire.)

PS. Vous pouvez compter sur bash pour l'arithmétique, en remplaçant l' perlappel par echo $(( $* )); mais cela vous donnera une division entière pour 5/6, etc. L'arithmétique de Perl est plus utile.

Alternative: Si votre seul boeuf avec du python est celui dont vous avez besoin import math, voici votre ami:

% alias calc='python -i -c "from math import *"'
% calc
>>> 5 * atan(0.25)
alexis
la source
0

Une autre façon consiste à utiliser un interpréteur comme Python 3:

$ python3
> from math import *
> 213/53*exp(0.8)/asin(3)
9.645423462356044

Avoir l'avantage, que vous pouvez tout scripter, il existe déjà de nombreuses fonctions (vous pouvez également importer cmathsi vous avez besoin de nombres complexes), vous n'avez pas besoin de définir de précision pour la plupart des cas et python est déjà installé sur la plupart des installations Linux.

Python 3.x est meilleur pour une calculatrice générique que Python 2.x, car Python 3.x fait une division en virgule flottante si le résultat n'est pas un entier.

$ python3
> 3/2
1.5
$ python2
> 3/2
1

L'inconvénient majeur, du moins pour moi, est que les flotteurs ne sont pas imprimés dans la notation scientifique s'ils ne sont pas très grands ou petits, sans chaîne de format:

> exp(35)
1586013452313430.8
> "{:e}".format(exp(35))
'1.586013e+15'
12431234123412341234123
la source