Каковы различия между dc
и bc
калькуляторами?
Когда я должен использовать dc
и когда bc
?
command-line
bc
calculator
синтагма
источник
источник
expr
очень часто использую простые вычисления в командной строке и в скриптах.Ответы:
dc
это очень архаичный инструмент и несколько старше, чемbc
. Цитировать страницу Википедии :Синтаксис является обратной польской нотацией, которая в основном означает, что аргументы (то есть числа) идут первыми, а затем оператор. Основной пример
dc
использования:Где
p
требуется распечатать результат расчета.bc
с другой стороны, используется более знакомая инфиксная нотация, что делает его более интуитивным в использовании. Вот примерbc
использования:Какой использовать?
bc
стандартизирован POSIX и, вероятно, является более переносимым из них (по крайней мере, в современных системах). Если вы выполняете ручную работу с калькулятором, то это определенно выбор (если вы не являетесь мазохистом).dc
Тем не менее, здесь можно найти применение, в данном случае пригодится обратная польская запись. Представьте, что у вас есть программа, которая выводит поток чисел, который вы хотите суммировать, например:Сделать это
dc
очень просто (по крайней мере, в современных реализациях, где каждый оператор может принимать более двух чисел), поскольку вам нужно только добавить a+p
в поток, например:Но с
bc
этим сложнее, так как нам нужно не только поставить+
между каждым число и убедиться, что все в одной строке, но и убедиться, что в конце есть новая строка:источник
gen_nums
ужасно сложный примерbc
. Это может быть упрощено до:gen_nums | paste -sd+ | bc
bc
был только инструмент внешнего интерфейса, который компилировалbc
нотацию в нотациюdc
и передавал ееdc
для получения результата. Во FreeBSD все еще есть-c
флаг,bc
с которым вы все еще можете скомпилировать вdc
нотацию. For example
echo '3 * 4' | bc` невероятно похож наecho '3 * 4' | bc -c | dc
. См. Linux.die.net/man/1/bc и freebsd.org/cgi/man.cgi?query=bc&sektion=1dc
вы используете? В Ubuntu 14.04 и OS X+
оператор всегда оперирует ровно двумя значениями вне стекаdc
использования:gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'
. Этот скрипт дляdc
чтения и добавления чисел один за другим в цикле, а затем печатает результат. Смотрите примечание относительно отрицательных чисел.bc -c
что-то странное и необычное (а-c
флаг недокументирован). Если я пытаюсь передать этоdc
, я получаю кучу ошибок (и вывод без привязкиdc
является очень загадочным@iK3:K4:*W@r\n@i
).Основное различие между ними состоит в том, что
dc
используется обратная польская запись . Это требует явных команд даже для того, чтобы произвести вывод.Вы можете добавить два целых числа
bc
, сказав:и он будет производить
6
на линии самостоятельно. Тем не менее,dc
вам нужно сказать:Вы также можете сделать много забавных вещей, используя
dc
, например, обратитесь к моему ответу здесь для производстваиспользуя
dc
.источник
Округ Колумбия До нашей эрыdc
это калькулятор, тогдаbc
как фактический язык. Смотрите их справочные страницы.Это действительно зависит от того, что вы в конечном итоге хотите сделать математически. Некоторые операции невозможны при использовании
dc
. Я использовал оба эти года в дополнение к нескольким другим инструментам калькулятора командной строки. Смотрите " Решатель выражений командной строки? " Для некоторых дополнительных примеров.источник
dc
того, что я являюсь калькулятором обратной польской нотации, и поскольку я всегда использовал калькуляторы обратной польской нотации, я на самом деле предпочитаю использоватьdc
его,bc
но я бы сказал, что они обе все еще используются в любое время, когда вам нужно выполнить сложный математический расчет. Я часто использую их для преобразования чисел от 10 ч / б до 16 и 2. Но я использовал их для подсчета столбцов в табличных данных также из скрипта AWK.bc
был язык в том смысле, что он сделалdc
человека дружественным - не то, чтобы он был более мощным. В эти дни приложения разделяет LIBS, ноbc
называли язык иdc
с калькулятором , потому чтоdc
сделали математику иbc
говорили математика - кdc
. Вот стараяman
страница : был разработан языкBC
[1], который принимает программы, написанные на языках более высокого уровня, и компилирует выходные данные, которые интерпретируются DC. Некоторые из команд, описанных ниже, были разработаны для интерфейса компилятора и не просты для манипулирования пользователем.dc
это также язык. например, codegolf.stackexchange.com/a/47921/11259По моему скромному мнению и в двух словах, насколько это возможно, GNU dc отличается от GNU bc тремя способами:
1) Если математическая библиотека bc не представляет проблемы, чтобы сохранить как можно больше нажатий клавиш (по словам Яна Лукасевича: нотация без скобок) при выполнении элементарной арифметики, сконцентрироваться больше на основных моментах и избежать отвлекающих факторов.
2) В командной строке Microsoft Windows 7 GNU dc потребляет меньше памяти (~ 320 КБ), чем GNU bc (~ 360 КБ).
3) Более детальное управление в GNU dc, чем в GNU bc, например, команды стек и регистр отсутствуют в GNU bc.
Версия 1.07.1 win32 для обоих находится по адресу https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
источник