Есть ли другой командной строки калькулятор , который поддерживает log
, n!
расчеты? По крайней мере, bc
не могу этого сделать, он сказал мне ошибку разбора
Было бы лучше, если бы я мог использовать скрипт, например echo '5!' | program
Есть ли другой командной строки калькулятор , который поддерживает log
, n!
расчеты? По крайней мере, bc
не могу этого сделать, он сказал мне ошибку разбора
Было бы лучше, если бы я мог использовать скрипт, например echo '5!' | program
Ответы:
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, с которых вы можете начать свое перевоспитание. Руководство Orpie в конечном итоге пригодится вам, как только вы научитесь думать RPN.
Чтобы вычислить 5! в Orpie, просто введите его , как вы бы писать: 5 !. Вы можете нажать Enterмежду ними, чтобы 5
сначала поместить их в стек, но это не обязательно.
Чтобы вычислить журнал 10 (5), введите 5 Enter ' l o Enter. В этом случае вы должны 5
сначала поместить стек в стек, поскольку следующее нажатие клавиши не является оператором. Этот символ одинарной кавычки входит в командный режим аббревиатуры, который позволяет начать ввод текста log10
, который можно однозначно идентифицировать только по первым двум символам. ( вместо этого l
вы получите функцию естественного журнала ln
.)
Как и в любом другом калькуляторе RPN, с Orpie вы можете по- настоящему быстро справиться с практикой.
Orpie есть в репозитории Ubuntu. FreeBSD включает его в Ports, as math/orpie
. На OS X вы можете установить его через Homebrew . Сторонние пакеты могут быть доступны для других ОС. Сборка из исходного кода может быть немного трудной, поскольку она написана на OCaml , и у вас, вероятно, не установлена среда разработки OCaml. Однако настроить его не особенно сложно.
Всегда есть GNU Octave , emacs калькуляторов командной строки (для тех случаев, когда вам нужна полная среда разработки и язык программирования, встроенный в калькулятор, и тысячи дополнительных дополнений)
или 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