Kalkulator wiersza poleceń, który zachowuje wartości ułamkowe

11

Właśnie znalazłem dobry program kalkulacyjny wiersza polecenia o nazwie bc i byłem z niego zadowolony, dopóki nie odkryłem, że zaokrągla wartości ułamkowe, powodując w ten sposób utratę precyzji.

Według jego manstrony:

Wszystkie liczby są reprezentowane wewnętrznie w systemie dziesiętnym, a wszystkie obliczenia są wykonywane w systemie dziesiętnym. (Ta wersja obcina wyniki operacji dzielenia i mnożenia).

Czy możesz zasugerować odpowiednik bc dla Ubuntu Maverick? Muszę dokonać zaawansowanych obliczeń w wierszu poleceń za pomocą zmiennych.

sergionni
źródło

Odpowiedzi:

13

Możesz ustawić długość części ułamkowej za pomocą scale=n.

Polecenie echo 'scale=20;752/447' | bcdaje:

1.68232662192393736017

Zauważ, że nawet jeśli liczba mieści się w skali, można dodać dodatkowe zero:

scale=20
1/2
.50000000000000000000

Niestety zawsze występuje problem z zaokrągleniem:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999
Lekensteyn
źródło
czy wartość skali można ustawić jako globalną, czy też zawsze powinienem ustawić ją jawnie, kiedy zaczniemy bc?
sergionni
1
@sergionni: Zawsze powinieneś przekazać scalezmienną do bc. Jedyną zmienną środowiskową, która może być przydatna jest BC_ENV_ARGS. Ta zmienna podaje kilka argumentów bc, możesz utworzyć plik ze standardowymi zmiennymi lub ustawieniami i ustawić BC_ENV_ARGS=/path/to/variables/file. Proszę przeczytać stronę podręcznika .
Lekensteyn,
Zwykle zaczynam bc przez bc -ql. -qukrywa baner praw autorskich (co zwykle okazuje się rozpraszające) i -lładuje bibliotekę matematyczną i automatycznie ustawia skalę na 20. (Patrz man bc.)
i336_
9

calc(Wierzę, że z pakietu apcalc) robi to samo bc, ale nie zaokrągla. Wyświetla się podobnie bc, ale inaczej niż bcrozumie notację naukową. Przykład:

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

Porównaj z 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

Trochę wyszukiwania pokazuje wiele wyników, z których nie wszystkie są istotne, ale jestem pewien, że kilka prób da ci dokładnie to, czego chcesz (na przykład wcalc):

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
źródło
9

Sugerowałbym użycie Pythona jako kalkulatora wiersza poleceń:

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

    Return the sine of x (measured in radians).

Polecam również IPython lub IDLE. Oba znacznie poprawiają użyteczność standardowej powłoki.

Aktualizacja : użyj Python3, aby uniknąć niespodzianek obcięcia:

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335
antimirov
źródło
Najlepszy kalkulator w historii. Możesz zrobić wszystko.
Owais Lone
2
To również obciąża obliczenia.
daithib8
Nie obetnie niczego, jeśli podzielisz np. Tak: 2.0 / 100. Oczywiście 2/100 równa się 0, ponieważ jest to dzielenie liczb całkowitych.
user205301
6

W tym sensie straciłeś precyzję: jeśli ustawisz precyzję na 10 cyfr dziesiętnych, działy zostaną obcięte do 10 cyfr dziesiętnych, co jest spójnym wyborem.

Jeśli szukasz dokładnego kalkulatora, potrzebujesz systemu symbolicznego jako maxima.

Nawiasem mówiąc, bcobsługuje zmienne.

enzotib
źródło
tak, wiem, że obsługuje zmienne, dlatego proszę o analog
sergionni
5

„geniusz” to najbardziej zaawansowany kalkulator z dostępnymi opcjami wiersza poleceń i GUI. Sprawdź szczegóły w instrukcji i zobacz http://www.jirka.org/genius.html .

Aby zainstalować, po prostu wpisz:

sudo apt-get install genius gnome-genius
Paul Ogilive
źródło
1

Oto dobry:

czop - dokładny prawdziwy kalkulator wiersza poleceń

Jens_G
źródło
1

Jeśli masz octavezainstalowany, możesz go użyć w wierszu poleceń jako:

octave --silent --eval 752/447

Aby skrócić pisanie, możesz dodać jako alias w .bashrc

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

i nazwij to jak ose 752/447. Alias ​​/ skrót jest dowolny, ale musisz go zrestartować, aby był skuteczny.

Możesz zainstalować octaveza pomocą:

sudo apt-get install octave

Oczywiście dzięki octaveniemu możesz korzystać ze wszystkich dostępnych w nim zaawansowanych funkcji.

Harris
źródło
1

Właśnie stworzyłem prosty:

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

$ ratio <<< '14/15 * 3'
14/5 
William Casarin
źródło
czy obsługuje zmienne?
paskudny
to jest teraz bardzo proste, tylko podstawowe wyrażenia. może pewnego dnia?
William Casarin
OP określił, że potrzebuje t obsługi zmiennych
paskudny 10.10.17