BC


|

bc - это язык, который поддерживает числа произвольной точности с интерактивным исполнения отчетности.
Безусловно, bc - один из аутсайдеров, когда дело доходит до расчетов по командной строке.

Главным достоинством bc является обработка чисел с запятой (float). В среде bash можно проводить обычные операции (сложение, вычитание, деление и умножение) с целыми числами, но без bc не обойтись, когда дело доходит до десятичных дробей.

Дальше приводится несколько примеров использования bc:

Использование bc для базовых операций:

bc <<< 3-2
bc <<< 5*2
bc <<< 9/3

как всегда, можно использовать echo + |:

echo "3*2" |bc
echo "3-2" |bc
echo "3*2" |bc
echo "3/2" |bc

bc, как положено, соблюдает приоритетность математических операций. Проверьте:

echo "2 + 2 * 2" |bc

Округление результата

В случае выполнения операции деления из примера bc вернет 1. Для того что бы показать цифры после запятой нужно указать сколько их нужно с помощью scale (по умолчанию = 0):

echo "scale=1;3/2" |bc

Если же у Вас есть файл с набором математических операций

, воспользуйтесь слудющей конструкцией:

bc < FileName

Использование результата последней операции:

echo "2 + 2;last * 2" |bc

Вместо last можно использовать точку:

echo "2 + 2;. * 2" |bc

Получение квадратного корня и возведение в степень
sqrt вернет квадратный корень из числа. Если результат является десятичной дробью - используйте scale для отображения знаков после запятой.

echo "sqrt(16)" | bc

Довольно странно, что у библиотеки, написанной на C не предусмотрено использование sqr, но все же его нету.

Пример возведения в степень:

echo "4^2" | bc

Тригонометри́ческие функции:

Сомневаюсь, что кто-то будет в скриптах использовать значение косинуса или натурального логарифма числа, но все же:

Создание переменных на основе результатов вычислений:

var1=$(echo "sqrt(16)" | bc)

var2=$(bc <<< "2 + 2 * 2")

echo $var1 + $var2 |bc

В этой статье bc используется для определения места, которое занимают базы даных mysql.

 

Показывает двоичное представление числа

obase=2; 180

10110100

Восьмеричное

obase=8; 180
264
Шестнадцетеричное

obase=16; 180
B4