Arrotondamento con Octave e bc

nikon-small-world-scales-of-a-butterfly-wing

Post che interessa probabilmente solo me, perso(nale), ma mi devo anche autogiustificare per tempo perso per chissà quale errore (mio) 😡
Ieri mi sono perso a rifare con Octave una cosa elementare, c’è e funziona perfettamente con il foglio di calcolo (tipo Excel) di Libre Office.
Forse è uno skill che ho acquisito nel tempo: quando sono sotto pressione, con qualcuno che ti fa fretta, “è pronto?”, “quanto ci vuole?” non riesco a produrre niente di buono. E se, come ieri, non si lavora nello stesso ufficio la situazione peggiora, diventa più macchinoso confrontarsi, scambiarsi le opinioni.
OK, finito il pippone ecco la soluzione in due versioni. Una premessa: uso il terminale (sono l’unico) ma ovviamente è per l’ambiente integrato. Inoltre ho il solito (mio) alias:

a-1

Il problema –semplicissimo– è di arrotondare un numero, float, alla seconda cifra decimale. È poi immediata la generalizzazione a qualsiasi altra cifra.
La prima soluzione, quella usuale è di moltiplicare il numero per 100, convertirlo in intero (in realtà no per Octave ma diventa intero nel senso che perde la parte decimale) e infine dividerlo per 100. Così:

a0

La verifica visualizza che il nuovo numero, na, sia davvero senza coda. L’operazione potrebbe sembrare perversa ma ci sono dei casi in cui si devono fare somme e moltiplicazioni nelle quali il risultato dev’essere “esatto” 👽

Un approccio diverso è quello di trasformare il numero in stringa formattandola con una funzione della famiglia di printf e poi ricavare il numero dalla stringa ottenuta, così:

a1

OK 😄 Semplice vero? eppure ieri non veniva 😡

E con bc? questione che ha deviato la discussione e –mysteryousamente– fatto evaporare il bug 😜

Al solito ho un alias, lo rimuovo per essere standard

b0

Chi non è abituato a Linux trova cose strane: solo interi! Ma è subito pronta l’opzione, via scale, numero di cifre decimali:

b1

Solo che non fa quello che si vuole: invece dell’arrotondamento si ha il troncamento 😯
Ma, come si faceva anticamente in Fortran, basta aggiungere mezzo centesimo al numero da arrotondare e tutto torna (vero Giòrs? (chissà se mi legge)).

b2

Notare che la divisione per 1 in questo caso è richiesta. Uh poteva essere anche una moltiplicazione 😜

Una particolarità di bc che sorprende i nuovi: il risultato è corretto per quante cifre si vuole ma non per tutte quelle visualizzate. Ecco l’esempio con π, calcolato come si faceva –OOPS! 😯  già detto– a() è l’arcotangente.

b3

Per quel che ne so basta non fidarsi delle ultime 2.

Lo so che è un post perso, ma mi sono sfogato. Voi non leggetelo.

:mrgreen:

Annunci
Post a comment or leave a trackback: Trackback URL.

Commenti

  • Man from Mars  On 16 febbraio 2017 at 12:20

    L’ho letto. Ora che mi succede? Incidentalmente, pensavo ad una questione simile da attaccare con Python (sto studiando!), con un tuo vecchio post ripescato per caso a fare da “scintilla”. Ah sì, e bc rockz (quasi)!

    • juhan  On 16 febbraio 2017 at 12:29

      Forse ti conviene fare l’esercizio che propongo domani, più sexy. E nuovo.

Trackbacks

Rispondi

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

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. 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 )

Google+ photo

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

Connessione a %s...

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