bc online manual
$ echo "161.61/(29.51 + 1.54)" | bc -l 5.20483091787439613526Как вы догадываетесь bc не ограничен такими простыми действиями как сложение, вычитание, умножение и деление.
- Некоторые математические функцииe(x) = ex - экспоненциальная функцияЕсли с числом e всё понятно, то где число ?
l(x) = ln(x) - лоналифм - натуральный логарифм
s(x) = sin(x) - функция синуса, x - в радианах
c(x) = cos(x) - функция косинуса, x - в радианах
a(x) = arctan(x) - функция арктангенса, результат в радианах
т.к. , то$ echo "4*a(1)" | bc -l 3.14159265358979323844
Для вычисления используем нехитрую связь:
Пример:$ echo "l(10)/l(2)" | bc -l 3.32192809488736234789
- Перевод в другие системы счисления
ibase = input base - система счисления на входе
obase = output base - система счисления на выходе
Замечание 1: По-умолчанию, ibase = obase = 10
Пример:$ echo "obase=16;243" | bc F3
Замечание 2: при переводе из системы, содержащей буквы, они должны быть написаны в верхнем регистре
Пример:$ echo "ibase=16;4FE" | bc 1278
Пример (перевод из 16чной системы счисления в двоичную):$ echo "ibase=16;obase=2;FE" | bc 11111110
- bc-скрипты
bc можно использовать и для более объёмных вычислений.
Для наглядности вычислим число e используя ряд Маклорена:
print "e(x), x is "; x = read() print "iterations ? "; c = read() a = 1 d = 1 e = 0 for (i = 0; i < c; i++){ if (i > 0) { d *= i a *= x } e += a / d } print e quit
$ bc -l exp.bc e(x), x is 1 iterations ? 100 2.71828182845904523526
- Различные настройки
- scale=x; - точность, кол-во выводимых знаков после запятой
$ echo "scale=5;1/3" | bc .33333
- scale=x; - точность, кол-во выводимых знаков после запятой
4 комментария:
Посредством чего можно связать bc c java? Допустим, чтобы наклепать хороший строчный калькулятор именно на java
На мой взгляд, не стоит всё грести под одну гребёнку. bc - хороший и мощный консольный инструмент.
В java много чего другого вкусного, и всё зависит от задачи.
Задача - неконсольный калькулятор с заданными функциями для виндоус. Всё отлично идёт до слова "виндоус", потому как писать вручную свою bc трудно, тем более что подходит она под ситуацию просто отлично.
Вот и имеем. Сделать бы гуй из одной единственной строки (тоже непонятно как), да ещё и к венде это примастить.
this is NOT true way.
try java scripting (pls do not confuse with javascript) - I mean javax.scripting package.
Отправить комментарий