Калькулятор командного рядка, який зберігає дробові значення


11

Я щойно знайшов хорошу програму калькулятора командного рядка під назвою bc і був задоволений нею, поки я не виявив, що вона округляє дробові значення, тим самим спричиняючи втрати в точності.

За його manсторінкою:

Всі числа представлені внутрішньо у десятковій формі, а всі обчислення проводяться у десятковій формі. (Ця версія скорочує результати від операцій ділення та множення.)

Скажіть, будь ласка, еквівалент bc для Ubuntu Maverick? Мені потрібно зробити розширені обчислення командного рядка зі змінними.

Відповіді:


13

Ви можете встановити довжину дробової частини за допомогою scale=n.

Команда echo 'scale=20;752/447' | bcдає:

1.68232662192393736017

Зауважте, що навіть якщо число відповідає шкалі, додаткові нулі можуть бути додані:

scale=20
1/2
.50000000000000000000

На жаль, завжди існує проблема округлення:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999

Чи можна встановити значення масштабу як глобальне або я завжди повинен встановлювати це явно, коли старт bc?
сергіоні

1
@sergionni: Ви завжди повинні передавати scaleзмінну bc. Єдиною мінливою середовищем, яка може бути корисною є BC_ENV_ARGS. Ця змінна ставить деякі аргументи bc, ви можете створити файл із стандартними змінними або параметрами та встановити BC_ENV_ARGS=/path/to/variables/file. Прочитайте сторінку керівництва .
Лекенштейн

Я прагну почати Bc via bc -ql. -qприховує банер авторських прав (що, як правило, відволікає) і -lзавантажує математичну бібліотеку і автоматично встановлює шкалу 20. (Див man bc.)
i336_

9

calc(Я вважаю, що в пакеті apcalc) робить те саме bc, що й не кругло. Він відображається аналогічно bc, але на відміну від bcнього, він розуміє наукові позначення. Приклад:

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

Порівняти з 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

Невеликий пошук виявляє безліч результатів, не всі з яких є релевантними, але я впевнений, що через кілька випробувань ви отримаєте саме те, що ви хочете (наприклад, 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

9

Я б запропонував використовувати Python як калькулятор командного рядка:

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

    Return the sine of x (measured in radians).

Також я б рекомендував IPython або IDLE. Обидва значно покращують зручність використання стандартної оболонки.

Оновлення : використовуйте python3, щоб уникнути сюрпризів усікання:

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335

Найкращий калькулятор. Ви могли зробити все, що завгодно.
Owais Lone

2
Це також обчислює обчислення.
daithib8

Якщо розділити, наприклад, це не буде нічого: 2.0 / 100. Звичайно, 2/100 було б рівним 0, оскільки це ціле ділення.
користувач205301

6

Ви втратили точність у цьому сенсі: якщо встановити точність на 10 десяткових цифр, ділення усічуються на 10 десяткових цифр, і це цілісний вибір.

Якщо ви шукаєте точний калькулятор, вам потрібна символічна система як maxima.

До речі, bcпідтримує змінні.


так, я знаю, що це підтримує змінні, ось я прошу аналог
sergionni

5

"genius" - це найсучасніший калькулятор, з наявними як командним рядком, так і GUI. Перегляньте посібник для отримання детальної інформації та перегляньте сторінку http://www.jirka.org/genius.html .

Щоб встановити, просто введіть:

sudo apt-get install genius gnome-genius

1

Ось хороший варіант:

spigot - точний реальний калькулятор у командному рядку


1

Якщо ви octaveвстановили, ви можете використовувати його в командному рядку як:

octave --silent --eval 752/447

Щоб скоротити написання, ви можете додати наступне як псевдонім у .bashrc

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

а потім називати це як ose 752/447. Псевдонім / ярлик є довільним, але для його ефективності потрібно перезапустити термінал.

Ви можете встановити, octaveвикористовуючи:

sudo apt-get install octave

Звичайно, octaveви можете також використовувати всі розширені функції, наявні в ньому.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.