CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
28.10.2020

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Desktop
Internet
Internet-серверы
Безопасность
Бизнес/Офис
Игры
Мультимедиа
Наука
Операционные системы
Программирование
СУБД
Создание веб-сайтов
Утилиты

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Заметки :: Блогометки :: Приложения

Заметки :: Блогометки :: Debian Day

bc: язык численных расчетов с произвольной точностью

http://beshenov.ru

Оригинал: «bc: an arbitrary precision numeric processing language», 11 октября 2007 г.

В Debian сейчас можно найти 84 пакета, так или иначе связанных с расчетами: apt-cache search calculator  wc -l. Вместо более красивых калькуляторов можно использовать bc. У bc нет модного графического интерфейса — это консольная программа с простым математическим языком — а потому bc быстро работает и легко программируется.

Каждодневное использование

По умолчанию, bc работает в непривычном режиме с целочисленной арифметикой и без функций вроде синуса, косинуса и логарифма. Исправить дело можно, указав при запуске bc параметр -l — тогда будет использоваться стандартная математическая библиотека. Чтобы не печатать всегда «bc -l», можно использовать переменную окружения BC_ENV_ARGS. В bash достаточно добавить в ~/.bashrc строчку «export BC_ENV_ARGS=-l».

Итак, посмотрим для начала 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        
65535.0
Да, bc считает лучше, чем Excel 2007. И результат будет получен быстрее, чем если бы вы запускали калькулятор для KDE или GNOME.

Произвольная точность и функции

По умолчанию, при запуске с «-l», bc дает результаты с 20 десятичными знаками после плавающей точки, но число знаков можно увеличить до 2 147 483 647. Чтобы получить достаточно хорошую оценку ?, просто напишите
scale=200  
4*a(1)     
3.141592653589793238462643383279502884197169399375105820974944592307
81640628620899862803482534211706798214808651328230664709384460955058
223172535940812848111745028410270193852110555964462294895493038196
Впечатляет. Но что такое «a(1)»? bc использует очень короткие имена для тригонометрических функций. a(x) — арктангенс x. Если вы предпочитаете более длинные имена, запишите в файл определение своей функции, после чего добавьте этот файл в BC_ENV_ARGS, и он будет считываться при каждом запуске bc. Лучше всего загрузить готовый файл extensions.bc по адресу http://x-bc.sourceforge.net/extensions_bc.html

Моя переменная BC_ENV_ARGS выглядит примерно так:

$ echo $BC_ENV_ARGS
-q -l /home/gru/.bc/extensions.bc
extensions.bc определяет некоторые функции под более привычными именами, например так:
define sin(x)
{
    return (s(x))
}
В том же духе вы можете задавать собственные функции. Часто мне нужно преобразовывать отношения напряжений или токов в децибелы:
define db(x,y)
{
    return 20*log(x/y);
}

Работа с разными системами счисления

bc может выполнять преобразования между произвольными системами счисления. Допустим, нужно перейти от десятичной записи числа к шестнадцатеричной. Для этого установим основание системы счисления для вывода obase равным 16:
obase=16 
10
A
Конечно, с этими числами можно проводить расчеты:
10/7
1.6DB6DB6DB6DB6DB6B
Основание системы счисления для ввода тоже можно менять:
ibase=16 
A/2
5
sin(AFFE) 
-.B1F4021654E454E72 
(Предлагаю самостоятельно разобраться, что это такое :-)

Использование в скриптах

Bash — хороший командный интерпретатор, но при сложных расчетах $(()) не поможет. Можно вызвать bc:
$ a=$( echo "l(1024)/l(2)" | bc )
$ echo $a
10

Заключение

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

bc есть во всех версиях Debian и в Ubuntu Dapper, Edgy, Feisty, Gutsy.

Ссылки




Комментарии

Страницы комментариев: 1 :: 2 :: следующая

аноним, Tue Sep 29 15:19:09 2009:
..Да, bc считает лучше, чем Excel 2007...

--------------------

Может и быстрее чем EXCEL 2007, но не нагляднее. А EXCEL для того и сделан. Так-то дядя.
аноним, Tue Sep 29 15:18:52 2009:
Каждодневный расчет числи Пи с точностью 200 знаков впечатляет больше коротких имен тригонометрических функций. Линукс стоит поставить хотя бы за то чтоб каждый день считать число Пи и наслаждаться гармонией цифр. Убеждаюсь еще раз что в линуксе весь софт для сверхлюдей с сияющими очами, а в виндовсе для тупых мудаков.
аноним, Tue Sep 29 14:27:20 2009:
А в bc как-то можно выводить результаты в виде 1.2345E-6789?
Andrey, Mon Jul 20 17:07:26 2009:
Использую питон для этих же целей. Может в производительности уступает, но удобнее
аноним, Fri Feb 13 20:10:07 2009:
Реализация произвольной точности:
http://compmathlib.ru/index.php?lang=ru&page=products2
аноним, Wed Mar 19 04:16:17 2008:
Отличнейший калькулятор. И даже более, чем просто калькулятор.
аноним, Fri Mar 14 18:59:51 2008:
аноним

alias bc='/usr/bin/bc -l -q .xbc/extensions.bc .xbc/scientific_constants.bc'
В.А., Sat Mar 8 21:17:11 2008:
.xbc/extensions.bc .xbc/scientific_constants.bc

-это из предложенного по ссылкам xbc. Удобно, я даже переименовал в "наши" tg, ctg и arctg, arcctg.
В.А., Sat Mar 8 20:45:21 2008:
Попробуйте:

BC_ENV_ARGS="-l -q .xbc/extensions.bc .xbc/scientific_constants.bc"

export BC_ENV_ARGS
аноним, Fri Mar 7 19:16:07 2008:
У меня почему-то bc не реагирует на переменную BC_ENV_ARGS. Куда копать?

Страницы комментариев: 1 :: 2 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds