Respostas:
bc
suporta o logaritmo natural se chamado com o -l
sinalizador. Você pode calcular o log da base 10 ou da base 2 com ele:
$ bc -l
...
l(100)/l(10)
2.00000000000000000000
l(256)/l(2)
8.00000000000000000007
Eu não acho que exista um fatorial embutido, mas isso é fácil o suficiente para você escrever:
$ 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
Ou:
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
Para ser compatível com POSIX, você precisa escrevê-lo:
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))
}
Ou seja: nome da função de caractere único, não print
, não halt
, parênteses necessários em return(x)
. Se você não precisa de validação de entrada (aqui para números inteiros positivos), é apenas:
define f(n) {
if (n < 2) return(1)
return(n * f(n - 1))
}
0!=1
exatamente como 1!=1
. Pelo menos, é o que diz a wikipedia.
Orpie é a calculadora para geeks de calculadora e de linha de comando. Emula uma moderna calculadora HP RPN, que é obviamente a única maneira verdadeira de calcular.
Se você é um herege de calculadora, criado em TIs, Casios e outros, existem muitos tutoriais de RPN on-line com os quais você pode iniciar sua reeducação. O manual da Orpie acabará sendo útil para você, depois de entender a maneira de pensar da RPN.
Para calcular 5! em Orpie, basta digitá-lo como você escrevê-lo: 5 !. Você pode pressionar Enterentre eles para empurrar 5
para a pilha primeiro, mas não é necessário.
Para calcular o log 10 (5), digite 5 Enter ' l o Enter. Você precisa 5
inserir a pilha primeiro neste caso, uma vez que o próximo pressionamento de tecla não é um operador. Esse caractere de aspas simples entra no modo de abreviação de comando, que permite começar a digitar log10
, que você pode identificar exclusivamente com apenas os dois primeiros caracteres. ( l
sozinho, você obtém a função de log natural ln
).
Como em qualquer calculadora RPN, você pode ficar muito rápido com o Orpie, com um pouco de prática.
Orpie está no repositório de ações do Ubuntu. O FreeBSD o inclui no Ports, como math/orpie
. No OS X, você pode instalá-lo através do Homebrew . Pacotes de terceiros podem estar disponíveis para outros sistemas operacionais. Construir a partir da fonte pode ser um pouco trabalhoso, pois está escrito em OCaml e você provavelmente não tem um ambiente de desenvolvimento OCaml instalado. Obter uma configuração não é particularmente difícil, no entanto.
Sempre existe o GNU Octave , o emacs das calculadoras de linha de comando (para quando você deseja um ambiente de desenvolvimento completo e uma linguagem de programação incorporada à sua calculadora, além de milhares de complementos opcionais)
ou R se as estatísticas são mais do seu interesse.
Na maioria das vezes eu apenas uso bc -l
para carregar a biblioteca matemática padrão ... Eu até tenho um bc
alias para bc -l
. Consulte a resposta de Mat para obter informações sobre como definir uma função fatorial .... embora a bc
página de manual a defina como:
define f (x) {
if (x <= 1) return (1);
return (f(x-1) * x);
}
Marcar <= 1 em vez de == 1 impede um loop infinito se você fornecer um número negativo (deve ser um erro) ou zero (válido).
O meu favorito é o leve, simples W-Calc
.
http://w-calc.sourceforge.net
Você não precisa procurar no manual ou recriar manualmente funções comuns, como faz com bc
- os comandos são exatamente exatamente o que você esperaria; portanto, basta digitar o que deseja e simplesmente funciona. Teste de acordo com sua pergunta - de fato log()
e n!
funcione conforme o esperado.
(É certo que eu não ouvi falar de Orpie - muito bem pode ser uma opção melhor.)
Se você possui portas Mac:
$ sudo /opt/local/bin/port install orpie