Calcolatore della riga di comando che mantiene i valori frazionari


11

Ho appena trovato un buon programma di calcolatrice da riga di comando chiamato bc e ne sono rimasto soddisfatto fino a quando ho scoperto che completa i valori frazionari, causando così una perdita di precisione.

Secondo la sua manpagina:

Tutti i numeri sono rappresentati internamente in decimale e tutto il calcolo viene eseguito in decimale. (Questa versione tronca i risultati delle operazioni di divisione e moltiplicazione.)

Potresti suggerire un equivalente di bc per Ubuntu Maverick? Devo eseguire calcoli avanzati della riga di comando con variabili.

Risposte:


13

È possibile impostare la lunghezza della parte frazionaria con scale=n.

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

1.68232662192393736017

Si noti che anche se il numero rientra nella scala, è possibile aggiungere ulteriori zero:

scale=20
1/2
.50000000000000000000

Sfortunatamente, c'è sempre un problema di arrotondamento:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999

il valore di scala potrebbe essere impostato come globale o dovrei sempre impostarlo esplicitamente mentre inizia bc?
sergionni,

1
@sergionni: dovresti sempre passare la scalevariabile a bc. L'unica variabile d'ambiente che potrebbe essere utile è BC_ENV_ARGS. Questa variabile mette alcuni argomenti a bc, è possibile creare un file con variabili o impostazioni standard e impostare BC_ENV_ARGS=/path/to/variables/file. Si prega di leggere la pagina del manuale .
Lekensteyn,

Tendo a iniziare bc via bc -ql. -qnasconde il banner sul copyright (che in genere si distrae) e -lcarica la libreria matematica e imposta automaticamente la scala su 20. (Vedi man bc.)
i336_

9

calc(Credo dal pacchetto apcalc) fa lo stesso bc, ma non arrotondare. Viene visualizzato in modo simile bc, ma a differenza bc, comprende la notazione scientifica. Esempio:

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

Confronta 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 piccola ricerca mostra molti risultati, non tutti rilevanti, ma sono sicuro che alcune prove ti daranno esattamente quello che vuoi (wcalc, ad esempio):

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

Suggerirei di usare Python come calcolatrice da riga di comando:

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

    Return the sine of x (measured in radians).

Consiglierei anche IPython o IDLE. Entrambi migliorano enormemente l'usabilità della shell standard.

Aggiornamento : usa python3 per evitare sorprese di troncamento:

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335

Il miglior calcolatore di sempre. Puoi fare qualsiasi cosa.
Owais Lone,

2
Anche questo tronca i calcoli.
daithib8,

Non troncerà nulla se si divide ad esempio in questo modo: 2.0 / 100. Naturalmente 2/100 sarebbe uguale a 0, perché è una divisione intera.
user205301

6

Hai perso precisione in questo senso: se imposta la precisione su 10 cifre decimali, le divisioni vengono troncate a 10 cifre decimali e questa è una scelta coerente.

Se cerchi un calcolatore esatto, hai bisogno di un sistema simbolico come maxima.

A proposito, bcsupporta le variabili.


sì, lo so che supporta le variabili, che sto chiedendo analogico
sergionni

5

"genius" è il calcolatore più avanzato in circolazione, con entrambe le opzioni da riga di comando e GUI disponibili. Controllare il manuale per i dettagli e consultare http://www.jirka.org/genius.html .

Per installare, basta digitare:

sudo apt-get install genius gnome-genius

1

Eccone uno buono:

spigot - una calcolatrice reale esatta da riga di comando


1

Se hai octaveinstallato puoi usarlo dalla riga di comando come:

octave --silent --eval 752/447

Per abbreviare la scrittura è possibile aggiungere quanto segue come alias in .bashrc

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

e poi chiamalo come ose 752/447. L'alias / collegamento è arbitrario ma è necessario riavviare il terminale per renderlo efficace.

Puoi installare octaveusando:

sudo apt-get install octave

Naturalmente, con octavete puoi usare anche tutte le funzioni avanzate disponibili.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.