Калькулятор командной строки, который сохраняет дробные значения

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

Согласно его странице руководства:

Все числа представлены внутри десятичной точки, и все вычисления выполняются в десятичной системе. (Эта версия обрезает результаты операций деления и умножения).

Не могли бы вы предложить эквивалент bc для Ubuntu Maverick? Мне нужно сделать расширенные вычисления командной строки с переменными.

Вы можете задать длину дробной части с помощью scale=n .

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

 1.68232662192393736017 

Обратите внимание, что даже если число соответствует шкале, могут добавляться дополнительные ноль:

 scale=20 1/2 .50000000000000000000 

К сожалению, всегда есть проблема округления:

 scale=50 1/3*3 .99999999999999999999999999999999999999999999999999 

calc (я считаю, из пакета apcalc ) делает то же самое, что и bc , но не apcalc . Он отображается аналогично 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 

Я бы предложил использовать Python в качестве калькулятора командной строки:

 $ python >>> from math import * >>> help(sin) sin(x) Return the sine of x (measured in radians). 

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

Вы потеряли точность в этом смысле: если установлена ​​точность до десяти десятичных цифр, деления усекаются до десяти десятичных цифр, и это согласованный выбор.

Если вы ищете точный калькулятор, вам нужна символическая система в качестве maxima .

Кстати, bc поддерживает переменные.

«гений» – самый продвинутый калькулятор, доступный как в командной строке, так и в графическом интерфейсе. Подробнее см. Руководство и см. http://www.jirka.org/genius.html .

Чтобы установить, просто введите:

 sudo apt-get install genius gnome-genius 

Вот хороший:

spigot – командная строка точного реального калькулятора

Если у вас установлена octave вы можете использовать ее в командной строке как:

 octave --silent --eval 752/447 

Чтобы сократить длину записи, вы можете добавить следующее как псевдоним в .bashrc

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

а затем назовите его как ose 752/447 . Псевдоним / ярлык произволен, но вам нужно перезапустить терминал, чтобы он стал эффективным.

Вы можете установить octave используя:

 sudo apt-get install octave 

Конечно, с octave вы можете использовать все расширенные функции, доступные в нем.

Я просто сделал простой:

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

 $ ratio <<< '14/15 * 3' 14/5