L’alternativa ortodossa a calc — bc

no! non sto parlando di questo

Credevate che il post su calc della scorsa settimana fosse l’ultimo della serie? Allora credevate male perché c’è bc che, a differenza di calc, viene installato automaticamente con Linux (e con Unix, naturalmente).
L’autore di bc è Mark Hopkins (almeno secondo questa pagina), il man di Ubuntu da invece Philip A. Nelson.

bc è un vero e proprio linguaggio di programmazione. Il manuale completo al solito è disponibile con

man bc

o online, All’indirizzo http://man.cx/bc dove potete trovarne un’altra versione in inglese, spagnolo, finlandese, ungherese, giapponese, coreano, polacco e turco –no l’italiano non c’è– diversa da quella installata su Ubuntu. Inoltre le versioni nelle varie lingue sono diverse (OK, non ne conosco nessuna di quelle elencate, ho semplicemente contato le opzioni in synopsis).

L’uso più elementare di bc è un pochino quirkoso

cioè bisogna passargli l’operazione da eseguire attraverso echo, usando la pipe. E ancora


bc liscio determina la precisione (le cifre dopo il separatore decimale) in base agli operandi che riceve; è possibile modificare questo comportamento settando la variabile scale. Notare che in questo caso dobbiamo racchiudere la stringa da echoare tra doppi apici.

È naturalmente possibile salvare il risultato in una variabile, così

o, seguendo la sintassi antica


che pare quella ancora preferita da qualcuno. A proposito: state seguendo il corso di BASH degli amici Bit3Lux e Lightuono, qui o qui vero?

Naturalmente si vede subito che questo modo d’uso è scomodo se si vogliono eseguire più calcoli in sequenza, eventualmente salvando i risultati in variabili. Ecco un esempio

Ma si può fare di meglio: con l’opzione -l (o l’equivalente lunga –mathlib) scale viene automaticamente impostato a 20 e sono disponibili le funzioni standard, come a – arcotangente dell’angolo, espresso in radianti.

Copiando da man.cx ecco la definizione di una funzione, mye, valore approssimato dell’esponenziale e suo esempio d’uso. È fatta per scopi puramente didattici in quanto la funzione e – esponenziale è predefinita quando si specifica l’opzione -l. Ecco il file test_e.bc

scale = 20
define mye(x) {
	auto a, b, c, i, s
	a = 1
	b = 1
	s = 1
	for (i = 1; 1 == 1; i++) {
		a = a*x
		b = b*i
		c = a/b
		if (c == 0) {
			return(s)
		}
		s = s+c
	}
}

/* calcolo l'esponenziale dei
   primi dieci interi
*/

for (i = 0; i <= 10; i++) {
   mye(i)
}

quit

eseguendola otteniamo


E con questo credo di aver illustrato cosa si può fare con bc.
Storicamente –ma non in Linux– bc si appoggia su dc.
Già resta da parlare di dc, prossimamente, forse 8)

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • bit3lux  Il 24 giugno 2011 alle 18:38

    …ma poi c’è anche la possibilità di calcolare la radice quadrata di 2
    echo ‘scale=30;sqrt(2)’ | bc
    1.414213562373095048801688724209 #risultato
    Ma forse non interessa a nessuno la radice quadrata di due! 😦

    • juhan  Il 24 giugno 2011 alle 18:54

      Confesso di essermi perso, forse il caldo, forse l’età 8)
      Le radici interessano sempre, a volte sono fondamentali (carote, rape, ____) però in questo caso mi sfugge il puntatore a cui punti; porta passiensa, spiegami.

  • bit3lux  Il 24 giugno 2011 alle 19:05

    ahahhahah Niente di particolare! Volevo solo dire la mia, a proposito di bc 😀 😀 😀

  • juhan  Il 24 giugno 2011 alle 19:12

    Per un attimo mi hai fatto temere di aver detto qualche fantozzata 😉
    Anche perché a me la Corazzata Potemkim (o come si scrive) piace 😀

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: