Автор: Маркус Грюнвальд (Markus Grunwald)
Перевод: Алексей Бешенов
2008-03-05
Оригинал: «bc: an arbitrary precision numeric processing language», 11 октября 2007 г.В Debian сейчас можно найти 84 пакета, так или иначе связанных с расчетами: apt-cache search calculator wc -l. Вместо более красивых калькуляторов можно использовать bc. У bc нет модного графического интерфейса — это консольная программа с простым математическим языком — а потому bc быстро работает и легко программируется.
Итак, посмотрим для начала bc в каждодневном использовании. Введем выражение и нажмем клавишу ввода:
$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 850*77.1Да, bc считает лучше, чем Excel 2007. И результат будет получен быстрее, чем если бы вы запускали калькулятор для KDE или GNOME.65535.0
scale=200Впечатляет. Но что такое «a(1)»? bc использует очень короткие имена для тригонометрических функций. a(x) — арктангенс x. Если вы предпочитаете более длинные имена, запишите в файл определение своей функции, после чего добавьте этот файл в BC_ENV_ARGS, и он будет считываться при каждом запуске bc. Лучше всего загрузить готовый файл extensions.bc по адресу http://x-bc.sourceforge.net/extensions_bc.html4*a(1) 3.141592653589793238462643383279502884197169399375105820974944592307 81640628620899862803482534211706798214808651328230664709384460955058 223172535940812848111745028410270193852110555964462294895493038196
Моя переменная BC_ENV_ARGS выглядит примерно так:
$ echo $BC_ENV_ARGS -q -l /home/gru/.bc/extensions.bcextensions.bc определяет некоторые функции под более привычными именами, например так:
define sin(x)
{
return (s(x))
}
В том же духе вы можете задавать собственные функции. Часто мне нужно преобразовывать отношения напряжений или токов в децибелы:
define db(x,y)
{
return 20*log(x/y);
}
obase=16Конечно, с этими числами можно проводить расчеты:10 A
10/7 1.6DB6DB6DB6DB6DB6BОснование системы счисления для ввода тоже можно менять:
ibase=16(Предлагаю самостоятельно разобраться, что это такое :-)A/2 5 sin(AFFE) -.B1F4021654E454E72
$ a=$( echo "l(1024)/l(2)" | bc ) $ echo $a 10
bc есть во всех версиях Debian и в Ubuntu Dapper, Edgy, Feisty, Gutsy.