Відповіді:
bc
підтримує природний логарифм, якщо його посилають на -l
прапор. Ви можете обчислити журнал base-10 або base-2:
$ bc -l
...
l(100)/l(10)
2.00000000000000000000
l(256)/l(2)
8.00000000000000000007
Я не думаю, що є вбудований факторіал, але це досить просто, щоб написати самому:
$ bc
...
define fact_rec (n) {
if (n < 0) {
print "oops";
halt;
}
if (n < 2) return 1;
return n*fact_rec(n-1);
}
fact_rec(5)
120
Або:
define fact_it (n) {
if (n < 0) {
print "oops";
halt;
}
res = 1;
for (; n > 1; n--) {
res *= n;
}
return res;
}
fact_it(100)
93326215443944152681699238856266700490715968264381621468592963895217\
59999322991560894146397615651828625369792082722375825118521091686400\
0000000000000000000000
Щоб відповідати POSIX, вам потрібно написати:
define f(n) {
auto s, m
if (n <= 0) {
"Invalid input: "
n
return(-1)
}
s = scale
scale = 0
m = n / 1
scale = s
if (n != m) {
"Invalid input: "
n
return(-1)
}
if (n < 2) return(1)
return(n * f(n - 1))
}
Тобто: ім'я функції одного символу, ні print
, ні halt
, потрібні дужки в return(x)
. Якщо вам не потрібна перевірка введення (тут для додатних цілих чисел), це просто:
define f(n) {
if (n < 2) return(1)
return(n * f(n - 1))
}
0!=1
так само 1!=1
. Принаймні, так говорить вікіпедія.
Orpie - це калькулятор для виводків калькулятора та командного рядка. Він імітує сучасний калькулятор HP RPN, що, звичайно, єдиний вірний спосіб розрахунку.
Якщо ви єретик-калькулятор, піднятий на TI, Casios тощо, в Інтернеті є багато навчальних посібників RPN, за допомогою яких ви можете розпочати переосвіта. Посібник "Орпі " з часом буде корисним для вас, як тільки ви придумаєте спосіб мислення RPN.
Для обчислення 5! в Orpie, просто введіть його , як ви б писати: 5 !. Ви можете натиснути Enterміж ними, щоб спочатку натиснути 5
на стек, але це не обов'язково.
Щоб обчислити журнал 10 (5), введіть 5 Enter ' l o Enter. У 5
цьому випадку вам потрібно спочатку натиснути на стек, оскільки наступне натискання клавіші не є оператором. Цей символ цитати входить у режим абревіатури команд, що дозволяє почати вводити текст log10
, який ви можете однозначно ідентифікувати лише за допомогою перших двох символів. ( натомість l
ви отримуєте природну функцію журналу ln
.)
Як і в будь-якому калькуляторі RPN, з Orpie ви можете отримати дуже швидко, трохи практикуючи.
Orpie знаходиться на складі репост Ubuntu. FreeBSD включає його в порти, як math/orpie
. В OS X ви можете встановити його через Homebrew . Сторонні пакети можуть бути доступні для інших ОС. Будівництво з джерела може бути нелегкою справою, оскільки це написано в OCaml , і ви, мабуть, не встановили середовище розробки OCaml. Однак налаштування однієї налаштування не особливо складна.
Завжди є GNU Octave , емаки калькуляторів командного рядка (бо, коли вам потрібне повне середовище розробки та мова програмування, вбудований у ваш калькулятор, і тисячі додаткових додатків)
або R, якщо статистика більше ваша річ.
Я в основному просто використовую bc -l
для завантаження стандартної математичної бібліотеки ... Мені навіть bc
пришлось bc -l
. Інформацію про визначення факторної функції дивіться у відповіді Мата .... хоча bc
головна сторінка визначає це як:
define f (x) {
if (x <= 1) return (1);
return (f(x-1) * x);
}
Перевірка на <= 1, а не == 1 запобігає нескінченному циклу, якщо ви випадково подаєте його негативне число (має бути помилка) або нуль (дійсне).
Моя улюблена легка, проста W-Calc
.
http://w-calc.sourceforge.net
Не потрібно шукати в посібнику чи вручну створювати загальні функції, як це робиться з вами bc
- команди в основному саме те, що ви очікували, тому просто введіть те, що вам потрібно, і воно просто працює. Тестування відповідно до вашого питання - дійсно, log()
і n!
працюйте так, як очікувалося.
(Правда, я не чув про Орпі - дуже добре, можливо, це буде кращий варіант.)
Якщо у вас є порти Mac:
$ sudo /opt/local/bin/port install orpie