bc não suporta log e cálculo fatorial?

14

Existe alguma outra calculadora de linha de comando que suporte log , n! cálculos? Pelo menos bc não pode fazer isso, ele me disse erro de análise

É melhor usar o script, por exemplo, echo '5!' | program

    
por daisy 29.07.2012 / 08:48

6 respostas

17

bc suporta o logaritmo natural se invocado com o sinalizador -l . Você pode calcular o log base-10 ou base-2 com ele:

$ bc -l
...
l(100)/l(10)
2.00000000000000000000

l(256)/l(2)
8.00000000000000000007

Eu não acho que há um fatorial embutido, mas isso é fácil o suficiente para se 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, sem print , sem halt , parênteses exigidos 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))
}
    
por 29.07.2012 / 09:00
4

Orpie é a calculadora para geeks de calculadoras e de linha de comando. Ele emula uma calculadora HP RPN moderna, que é, naturalmente, a única maneira verdadeira de calcular.

Se você é um herege da calculadora, criado em TIs, Casios e outros, existem muitos RPN tutoriais on-line com os quais você pode começar sua reeducação. O manual do Orpie acabará sendo de alguma utilidade para você, uma vez que você tenha a maneira de pensar da RPN.

Para calcular 5! em Orpie, apenas digite como você escreveria: 5 ! . Você pode pressionar Enter entre eles para empurrar 5 para a pilha primeiro, mas não é necessário.

Para calcular o log 10 (5), digite 5 Entre ' l o Digite . Você precisa empurrar o 5 para a pilha primeiro nesse caso, já 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 iniciar a digitação de log10 , que você pode identificar exclusivamente com apenas os dois primeiros caracteres. ( l sozinho obtém a função de registro natural, ln ).

Como acontece com qualquer calculadora de RPN, você pode conseguir realmente rápido com o Orpie, com um pouco de prática.

O Orpie está no repositório de ações do Ubuntu. O FreeBSD inclui em 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, já que está escrito em OCaml , e você provavelmente não tem um Ambiente de desenvolvimento OCaml instalado. Conseguir uma configuração não é particularmente difícil.

    
por 29.07.2012 / 09:37
2

Há sempre o GNU Octave , o emacs das calculadoras de linha de comando (para quando você quer um ambiente de desenvolvimento completo e linguagem de programação incorporada à sua calculadora e milhares de complementos opcionais)

ou R se as estatísticas são mais sua coisa.

Eu principalmente uso apenas bc -l para obter a biblioteca matemática padrão carregada ... Eu ainda tenho bc alias para bc -l . Veja a resposta de Mat para informações sobre como definir uma função fatorial ... embora a página bc man a defina como:

define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}

A verificação de < = 1 em vez de == 1 impede um loop infinito se você alimentar um número negativo (deve ser um erro) ou zero (válido).

    
por 29.07.2012 / 10:34
1

Meu favorito é o leve, simples W-Calc . link

Você não precisa procurar no manual ou recriar funções comuns manualmente, como acontece com bc - os comandos são basicamente exatamente o que você espera, então apenas digite o que você quer e apenas trabalho. Teste de acordo com sua pergunta - de fato log() & n! funciona como esperado.

(Admito que eu não ouvi falar de Orpie - muito bem pode ser uma opção melhor.)

    
por 23.02.2016 / 01:25
0

Totalmente exagerado, mas intérpretes de linguagem de programação são calculadoras de linha de comando depois de tudo:

$ echo 5 | python -c 'import sys; import math; print math.factorial(int(sys.stdin.readline()));'
120
    
por 03.10.2017 / 17:05
-1

Se você tem portas do Mac:

$ sudo /opt/local/bin/port install orpie
    
por 06.10.2013 / 01:08

Tags