Author Archives: juhan

Octave – tipi di dati – 8

1930

Tipi di dati

Argomento nuovo — finalmente– continuando da qui.

All versions of Octave include a number of built-in data types, including real and complex scalars and matrices, character strings, a data structure type, and an array that can contain all data types.

It is also possible to define new specialized data types by writing a small amount of C++ code, anche se non credo m’interessi, almeno non ora.

Esistono le built-in functions; c’è typeinfo() che può essere chiamata anche con un nome di funzione: typeinfo(expr).

Tipi di dati built-in
Non copio, c’è tutto qui; poi si vedrà quando si usano.
Solo un esempio volante:

o26

Più interessante la definizione di un array con typecast:

o27

Oggetti numerici
Sono qui.
Octave’s built-in numeric objects include real, complex, and integer scalars and matrices. All built-in floating point numeric data is currently stored as double precision numbers. On systems that use the IEEE floating point format, values in the range of approximately 2.2251e-308 to 1.7977e+308 can be stored, and the relative precision is approximately 2.2204e-16. The exact values are given by the variables realmin, realmax, and eps, respectively.

Matrix objects can be of any size, and can be dynamically reshaped and resized. It is easy to extract individual rows, columns, or submatrices using a variety of powerful indexing features.

Dati mancanti
Traduzione di missing data, sono qui.
It is possible to represent missing data explicitly in Octave using NA (short for “Not Available”). Missing data can only be represented when data is represented as floating point numbers. In this case missing data is represented as a special case of the representation of NaN.

C’è per quello la funzione NA() e isna().

o28

Notare l’effetto di uint8() (e funzioni simili) sull’array per i fuori scala😀
Inf è chiaro vero?

Oggetti stringa
Qui.
A character string in Octave consists of a sequence of characters enclosed in either double-quote or single-quote marks. Internally, Octave currently stores strings as matrices of characters. All the indexing operations that work for matrix objects also work for strings.

o29

La differenza è l’uso del backslash

o30

Uh! niente \ con gli apici

o31

invece

o32

Oggetti strutture di dati
C’è tutto qui, non credo m’interessi.

Oggetti cell array
Qui.
A Cell Array in Octave is general array that can hold any number of different data types.

Esempio:

o33

Continua, prima o poi arriverò alle cose sensate😳 forse:mrgreen:

Octave – inizio davvero – 7

back2future

Continuando da qui sono sempre nelle cose preliminari, semplificando dal manuale, qui.

Indicazioni di errore
Ci sono due tipi di indicazioni, siccome mi sembra tutto auto-evidente non copio, c’è –eventualmente– di là. Piuttosto un esempio per verificare se è vero:

o20

Uh! c’è un * di troppo:

o21

OK, vado avanti avanti. Sono qui.

Eseguibili di Octave
Once you have learned Octave, you may want to write self-contained Octave scripts, using the ‘#!’ script mechanism. You can do this on GNU systems and on many Unix systems.
Non sono compilati, sono solo script abilitati, ma mi adeguo al manuale e li chiamo eseguibili anch’io.
Per chi usa Windows si può creare un .bat o roba ancora peggio (immagino, sono ‘gnurant).

Self-contained Octave scripts are useful when you want to write a program which users can invoke without knowing that the program is written in the Octave language. Octave scripts are also used for batch processing of data files. Once an algorithm has been developed and tested in the interactive portion of Octave, it can be committed to an executable script and used again and again on new data files.

As a trivial example of an executable Octave script, you might create a text file named hello, containing the following lines:

#!/usr/bin/octave -qf
# a sample Octave program
printf ("Hello, world!\n");

o22

chmod serve per abilitarlo (solo la prima volta, l’ho detto tante volte e ogni volta mi dico che non lo ripeto più; per sapere cosa scrivere nella shebang (la prima riga) usate whereis octave (anche questo non lo dirò più).

Il manuale la fa più lunga, anche l’opzione -f servirebbe solo per casi molto particolari ma male non fa e allora si usa.

Una cosa sugli argomenti passati con la linea di comando, ovvia, il comportamento che uno si aspetta:

#!/usr/bin/octave -qf

printf ("%s", program_name());
arg_list = argv();
for i = 1:nargin
  printf (" %s", arg_list{i});
endfor
printf ("\n");

o23-0

OK, adesso modifico:

#!/usr/bin/octave -qf

printf ("ecco qui %s\n", program_name());
arg_list = argv();
for i = 1:nargin
  printf (" %s\n", arg_list{i});
endfor
printf ("\n");

o23-1

Chiaro, vero? Sarà comunque tutto approfondito a suo tempo.

Passo all’argomento successivo, qui.

Commenti
Ci sono tre tipi di commenti:

  • commenti su una sola linea: tutto quello che segue il carattere # è un commento, usuale su Unix/Linux; il carattere % fa la stessa cosa;
  • blocchi di commento: tutte le linee racchiuse tra #{ e #} o %{ e %} sono commenti;
  • il primo blocco di commenti in una funzione è richiamabile con help.

Esempio

o24

:mrgreen:

Visto nel Web – 241

Fa caldo ma come al solito ecco cosa ho visto nel Web.

ClzejkvWEAAZMwp
Scala is the new golden child
#:linguaggi di programmazione
::: TechCrunch

Why Does a Hacker Must be a Good Programmer?
#:programming, codice, snippet
::: Technotification

How to download Coursera’s courses before they’re gone forever
#:manuali, how to
::: freecodecamp

Y Combinator’s Xerox Alto: restoring the legendary 1970s GUI computer
#:storia
::: Ken Shirriff’s

Python machine learning book
work in progress
#:manuali, how to
::: rasbt

Ci3l6Q-WUAA0Nqf

Apple won’t aid GOP convention over Trump
#:ditte
::: fabiochiusi

Logarithm multiplication
l’amico Marco Fulvio mi ricorda quando ero giovane; e il regolo so usarlo ancora
#:storia
::: Marco Fulvio’s Dust

Infinite recursion
#:umorismo
::: ThePracticalDev

Graph Traversal Algorithms
#:programming, codice, snippet
::: WorkShape

South Australia Refuses To Stop Using An Expired, MS-DOS-Based Health Software
#:tools, componenti software
::: Slashdot

13266013_1118580311540187_3345944624806471398_n

New Ransomware Written Entirely In JavaScript
#:sicurezza, spionaggio
::: Slashdot

Big Tech Squashes New York’s ‘Right To Repair’ Bill
#:hardware #:ditte
::: Slashdot

California Researchers Build The World’s First 1,000-Processor Chip
#:hardware #:innovazioni, futuro
::: Slashdot

La risposta del Centro Nexa alla consultazione pubblica sul ruolo degli editori nella catena del valore del copyright e sulla eccezione di panorama
::: Nexa
#:copyright

The Essence of Scala
#:programmazione funzionale
::: Scala

FB_IMG_1465112025308

Go Debian
#:linguaggi di programmazione
::: Grab the Blaster

Go static – ovvero il vademecum di GitLab sugli static site generator
#:tools, componenti software #:Web, Internet
::: Grab the Blaster

If #science is going to save the world, we need to make it open
#:copyright
::: wef

China Builds World’s Fastest Supercomputer Without U.S. Chips
#:hardware
::: Slashdot

Alan Kay: Development environments should help programmers think
#:programming, codice, snippet
::: RainerJoswig ::: RainerJoswig

13445310_10209650177402330_947641764366402941_n

RT @dysinger Can’t reach the pedals. no brakes. gaining speed. eyes bulging in horror. technical debt crash imminent
#:umorismo
::: opbeat

Coconut: functional programming language, compiles to Python
#:linguaggi di programmazione
::: dloss

Autocomplete based upon type information
#:umorismo
::: JJoeKoullas

And you shouldn’t design a language if you don’t understand why null is the billion dollar mistake, but here we are
#:programming, codice, snippet
::: bmastenbrook

HOWTO: Classic, apt-based Ubuntu 16.04 LTS Server on the rpi2!
#:hardware #:sistemi operativi
::: From the Canyon Edge

13428518_1134928619911632_3818268466231985551_n

Broken Hardware, Fixes and Hacks over 8 Years
#:hardware
::: HookRace

Hypothesis testing and number theory
non so se è pertinente al blog ma intriga
#:programming, codice, snippet
::: John D. Cook

Occhio a Paypal: nuova campagna phishing
#:sicurezza, spionaggio
::: EPietrafesa

High IQ Countries Have Less Software Piracy, Research Finds
#:pirateria
::: TorrentFreak

Mark Zuckerberg Votes To Keep Peter Thiel On Facebook Board
#:ditte #:Web, Internet #:sicurezza, spionaggio
::: Slashdot

sac160623

One year as a Data Scientist at Stack Overflow
#:Web, Internet
::: Variance Explained

Smartphone Users Are Paying For Their Own Surveillance
#:sicurezza, spionaggio
::: Slashdot

Revealed: the day Guardian destroyed Snowden hard drives under watchful eye of GCHQ – video
#:sicurezza, spionaggio
::: The Guardian

Stop saying learning to code is easy
#:programming, codice, snippet
::: Scott Hanselman

Sweden asks to meet Julian Assange inside Ecuador embassy
chissà se…
#:sicurezza, spionaggio
::: the Guardian

13516518_1195905530460686_5025347439494805318_n

Advisor to the Court of Justice of the EU: copyright law must evolve with technology
#:copyright
::: Communia

The Digital Economy & Society Index (DESI)
#:economia #:Web, Internet
::: European Commission

Coconut
minaccia: un giorno che sono giù lo installo e ci bloggo su, nèh!😳
#:linguaggi di programmazione
::: Coconut

Parallel Python – Making Code Run 2000x Faster
#:programming, codice, snippet
::: Go Parallel

Epiphany vuole essere il nuovo Electron
#:Web, Internet
::: Grab the Blaster

ClkeHOUUkAA-wVI

I do not use a debugger
io ho debbuggato parecchio molto tempo fa; adesso molto meno, anzi quasi niente
#:programming, codice, snippet
::: Daniel Lemire

Meta Moore’s Law
#:umorismo
::: arialdomartini

Microsoft: Nearly One In Three Azure Virtual Machines Now Are Running Linux
#:sistemi operativi
::: Slashdot

Five lemma, ASCII art, and Unicode
#:tools, componenti software
::: John D. Cook

Jim Porter and the History of the Global Storage Industry
#:storia
::: Computer History Museum

ClqSnnUWEAAaZoZ

3 Million Strong Botnet Grows Right Under Twitter’s Nose
#:spam
::: Slashdot

Scoperta grave vulnerabilità su Windows presente da 20 anni
#:bug
::: Tech Economy

Intercettazioni con i trojan di Stato: ecco la proposta di legge
c’è ancora Pisanu?
#:sicurezza, spionaggio
::: la Stampa

Democratize the Internet Now!
#:Web, Internet
::: New Republic

The New Censorship: ‘How Did Google Become The Internet’s Censor and Master Manipulator?’
non solo Google
#:Web, Internet #:censura
::: Slashdot

Clx37-ZWQAE_ko_

Why Drones Could Save Door-To-Door Mail Delivery
#:innovazioni, futuro
::: Slashdot

Chomping down on bash’s brace expansion
s’impara sempre qualcosa (colpa mia le {} le usavo su Apollo ma non sapevo che ci sono anche qua
#:tip suggerimenti
::: ComputerWorld

3 cose su Linux che l’utente Windows dovrebbe sapere
#:sistemi operativi
::: Tech Economy

Full Circle Magazine #110 is out!
#:programming, codice, snippet
::: fullcirclemag

limit the CPU usage of Firefox / Dropbox / etc.
#:tip
::: The Ubuntu Incident

nq160625

Lkely next UK PM Boris Johnson called for end to Assange siege “It’s absolutely ridiculous,”
#:sicurezza, spionaggio
::: wikileaks

74% of Netflix Subscribers Would Rather Cancel Their Subscription Than See Ads
#:Web, Internet #:spam
::: Slashdot

White House warns Congress not to kill net neutrality and cable box rules
#:Web, Internet
::: Ars Technica

Russia’s new Big Brother law is an unworkable, unjustifiable violation of rights that should never be signed
#:sicurezza, spionaggio
::: Snowden

farages

Posta Elettronica e Sicurezza. Qual è la situazione?
#:sicurezza, spionaggio
::: Tech Economy

Why did Google choose Java as default application programming language for Android
#:linguaggi di programmazione #:dispositivi mobili
::: Techworm

Java, PHP, NodeJS, and Ruby Tools Compromised By Severe Swagger Vulnerability
#:sicurezza, spionaggio
::: Slashdot

Software that gets used
considerazioni semplici che condivido in pieno
#:programming, codice, snippet
::: John D. Cook

newtons cradle with light bulbs

SICP – cap. 1 – Esempio: test di primalità – esercizi – 28

CfL

Proseguendo da qui oggi esercizi, qui.

Exercise 1.21.  Use the smallest-divisor procedure to find the smallest divisor of each of the following numbers: 199, 1999, 19999.

s50

Uh! semplicissimo (mi sfugge qualcosa?); con i medici si dice sentire un altro parere:

s51

OK, torna. È ora di vedere i miei solutori preferiti, no nessuno che dice niente più di quel che ho detto io; l’esercizio è troppo facile, allerta per cosa ci prepara.

Exercise 1.22.  Most Lisp implementations include a primitive called runtime that returns an integer that specifies the amount of time the system has been running (measured, for example, in microseconds). The following timed-prime-test procedure, when called with an integer n, prints n and checks to see if n is prime. If n is prime, the procedure prints three asterisks followed by the amount of time used in performing the test.

(define (timed-prime-test n)
  (newline)
  (display n)
  (start-prime-test n (runtime)))
(define (start-prime-test n start-time)
  (if (prime? n)
      (report-prime (- (runtime) start-time))))
(define (report-prime elapsed-time)
  (display " *** ")
  (display elapsed-time))

Using this procedure, write a procedure search-for-primes that checks the primality of consecutive odd integers in a specified range. Use your procedure to find the three smallest primes larger than 1000; larger than 10,000; larger than 100,000; larger than 1,000,000. Note the time needed to test each prime. Since the testing algorithm has order of growth of O(n), you should expect that testing for primes around 10,000 should take about 10 times as long as testing for primes around 1000. Do your timing data bear this out? How well do the data for 100,000 and 1,000,000 support the n prediction? Is your result compatible with the notion that programs on your machine run in time proportional to the number of steps required for the computation?

Ecco; come previsto😳
OK, entrino i supporti, Bill the Lizard è dettagliato, considera una mancanza in Scheme — chissà se Racket…, sì anche Racket.

(define (timed-prime-test n)
   (newline)
   (display n)
   (start-prime-test n (current-inexact-milliseconds)))

(define (start-prime-test n start-time)
   (cond ((prime? n)
          (report-prime (- (current-inexact-milliseconds) start-time)))))

(define (report-prime elapsed-time)
   (display " *** ")
   (display elapsed-time))

(define (smallest-divisor n)
   (find-divisor n 2))

(define (find-divisor n test-divisor)
   (cond ((> (square test-divisor) n) n)
         ((divides? test-divisor n) test-divisor)
         (else (find-divisor n (+ test-divisor 1)))))

(define (divides? a b)
   (= (remainder b a) 0))

(define (square x)
   (* x x))

(define (prime? n)
   (= n (smallest-divisor n)))

quindi:

s52

e poi

s53

e, dopo qualche tentativo

s54

e anche

s55

Ken Dyck ha un approccio diverso, funziona solo nell’ambiente integrato (cioè no, ma con DrRacket è più facile). Interessante, da vedere di là😉
S-sol ha una soluzione diversa ancora, d vedere.
Bravo anche Spaceman Aki😀
Ci sarebbe anche Eli Bendersky che (al solito) rockz ma usa il Common Lisp (CL); per adesso lo salto (anche se…)

:mrgreen:

Octave – inizio davvero – 6

3YeContinuo dal post precedente, sono sempre nel Getting Started, qui.

Chiudere Octave
Shutdown is initiated with the exit or quit commands (they are equivalent). Similar to startup, Octave has a shutdown process that can be customized by user script files. During shutdown Octave will search for the script file finish.m in the function load path. Commands to save all workspace variables or cleanup temporary files may be placed there. Additional functions to execute on shutdown may be registered with atexit.

Per adesso ci bastano i due comandi equivalenti quit e exit. Per Linux, al solito, si può usare il solito C-d.

Pronto al prossimo argomento, qui.

Comandi per chiedere aiuto.
A me ha chiesto di installare octave-info.

The entire text of this manual is available from the Octave prompt via the command doc. In addition, the documentation for individual user-written functions and variables is also available via the help command. This section describes the commands used for reading the manual and the documentation strings for user-supplied functions and variables. See Function Files, for more information about how to document the functions you write; questo solo per utenti über-esperti, come vedremo in futuro.

I comandi disponibili sono parecchi, tanti, troppi. Li elenco senza commenti (c’è l’help). Nell’elenco ci sono anche funzioni perché il manuale è per tutti: novellini e esperti.

Command: help name
Command: help --list
Command: help .
Command: help

Command: doc function_name
Command: doc

Command: lookfor str
Command: lookfor -all str
Function File: [fcn, help1str] = lookfor (str)
Function File: [fcn, help1str] = lookfor ("-all", str)

Command: news
Command: news package

Built-in Function: val = info_file ()
Built-in Function: old_val = info_file (new_val)
Built-in Function: info_file (new_val, "local")

Built-in Function: val = info_program ()
Built-in Function: old_val = info_program (new_val)
Built-in Function: info_program (new_val, "local")

Built-in Function: val = makeinfo_program ()
Built-in Function: old_val = makeinfo_program (new_val)
Built-in Function: makeinfo_program (new_val, "local")

Built-in Function: val = texi_macros_file ()
Built-in Function: old_val = texi_macros_file (new_val)
Built-in Function: texi_macros_file (new_val, "local")

Built-in Function: val = doc_cache_file ()
Built-in Function: old_val = doc_cache_file (new_val)
Built-in Function: doc_cache_file (new_val, "local")

Built-in Function: val = built_in_docstrings_file ()
Built-in Function: old_val = built_in_docstrings_file (new_val)
Built-in Function: built_in_docstrings_file (new_val, "local")

Built-in Function: val = suppress_verbose_help_message ()
Built-in Function: old_val = suppress_verbose_help_message (new_val)
Built-in Function: suppress_verbose_help_message (new_val, "local")

Function File: doc_cache_create (out_file, directory)
Function File: doc_cache_create (out_file)
Function File: doc_cache_create ()

Built-in Function: [text, format] = get_help_text (name)

Built-in Function: [text, format] = get_help_text_from_file (fname)

Function File: text = get_first_help_sentence (name)
Function File: text = get_first_help_sentence (name, max_len)
Function File: [text, status] = get_first_help_sentence (...)

Avvertenza: non vorrei che l’elenco vi spaventasse; io per esempio lo ignoro, ignoro cosa significhi😳

:mrgreen:

Emoji come se piovesse; basta chiedere

sg2

OK, non so se serve –anzi mooolto probabilmente no: ❎  ❌  🚫  ◼  🙅  ⏰  🅱, nope: 🙅  ✋  🚫  👐  ❌  😂  👋.

Ma l’idea c’è e poi mi serve per provare il nuovo editor di WordPress. Nuovo si fa per dire, è nuovo per me che sono rimasto ancora al vecchio.

Allora il programma eseguibile da terminale è emoj, dovuto a sindresorhus, che è anche una tweetstar 🔝
Trovate tutto qui; l’unica avvertenza è che se dovete installare (come me) npm dovete farlo come root, quindi con sudo, nèh!

Poi funziona, p.es.:

ej

Siccome sto provando l’editor aggiungo uno script, senza senso, solo per vedere come viene.

#!/bin/bash
if [ $# -eq 0 ]; then
    echo Ciao $USER!
else
    echo Ciao $1!
fi

Funziona? l’editor intendo 🙅

:mrgreen:

Octave – inizio davvero – 5

CdcgRMoUAAAblK9

Continuo da qui. Come sono solito seguo scrupolosamente –quasi– il manuale, in questo caso GNU Octave — Copyright © 1996-2016 John W. Eaton.
Ma dopo l’Introduzione c’è un sotto-capitolo sulle Convenzioni usate nel manuale che non ha senso riportare qui.
Passo pertanto al secondo capitolo, Getting Started, sintetizzando anche qui.

Lanciare Octave
Normally, Octave is used interactively by running the program ‘octave’ without any arguments. Once started, Octave reads commands from the terminal until you tell it to exit.

You can also specify the name of a file on the command line, and Octave will read and execute the commands from the named file and then exit when it is finished.

You can further control how Octave starts by using the command-line options described  in the next section [qui di seguito], and Octave itself can remind you of the options available. Type ‘octave --help’ to display all available options and briefly describe their use (‘octave -h’ is a shorter equivalent).

Opzioni per la command line
Sono tante, di solito ne serve solo qualcuna, quelle che elenco. Le restanti sono qui.
Per eseguire codice si usa l’opzione --eval code. Per eseguire un programma su file si passa a Octave il nome del file (come si fa da sempre).
Per avere l’eco dei comandi eseguiti ci sono --echo-commands e -x
Per avere l’help  ci sono --help, -h, -?
Per eseguirlo nel terminale si usa --no-gui.
Per eliminare il messaggio iniziale ci sono --silent, --quiet, -q
Esiste anche il debug --debug o -d
Per tutti gli altri vedi qui o usa --help (o -h).

Files di startup
When Octave starts, it looks for commands to execute from the files in the following list. These files may contain any valid Octave commands, including function definitions.
Per sapere quali sono e cosa sono vedi qui.

Io mi sono creato l’alias per eseguirlo nel terminale interattivamente (cosa che si chiama REPL):

alias roc='octave -q --no-gui'

Per chi usa Windows si può creare un batch file, ma credo siano più abituati all’ambiente integrato.

Continua, ma adesso pausa😀

:mrgreen:

Espressioni matematiche – indice

ruotePartendo da un post su Facebook di Roberto proooof Zar Zanasi ho pubblicato un po’ di roba, vista da un ingegnere civile che si è occupato anticamente di programmazione. Naturalmente una visione personale, so di non sapere (cit.); sono carente per quanto riguarda la matematica (e altro).
Ho visto come si comportano linguaggi di programmazione e tools on- e offline.
Questo è l’elenco dei post:

Per quanto mi riguarda potrebbero aggiungersi elementi solo se arrivano contributi tramite commenti (sui poi, su Facebook, su Twitter, su G+, via mail, snailmail, telefono, piccioni viaggiatori, ___________). Se invede di un commento arriva una bozza di un post (a n1n0 [dot] aegis [at] gmail [dot] com) lo impagino e posto. Se invece è un post su un altro blog o social-coso lo cito qui in fondo come aggiornamento. Da colloqui informali potrebbe essercene uno, prossimamente😉

Per intanto –prima di subito– ne ho due da segnalare.

Potenza di potenza: commento sprint di Gianluigi Filippelli (rockz! assay) che vede l’espressione in modo completamente e interamente differente, incompatibile con la Wiki & me (io): qua davvero ci vorrebbe un set di mate.

Roberto Zanasi consiglia Haskell, ecco un link per provarlo online: Try Haskell! An interactive tutorial in your browser.

Ottimo😀 Attualmente sono ale prese con due linguaggi, uno pratico (Octave) e uno molto meno anche se… (SICP con Racket). Quasi promesso che alla fine di uno dei due Haskell sarà candidato. Probabilmente. Forse😳
Ah! c’è anche un’evoluzione di Python, Coconut. Chissà😳

OK, qui in fondo c’è un sacco di spazio per gli aggiornamenti (quasi-cit.).
Ah! ‘na cosa’ncora: l’immagne lassù viene da un tweet über-fondamentale😀

:mrgreen:

Calcoli aritmetici – come li fanno

canContinuo con il confronto su come calcoli semplici vengono svolti da tools e linguaggi di programmazione diversi. È la continuazione di questo post, anche se credo possa essere visto anche autonomamente.

Per prima cosa un comportamento che vedo usato da chi ha una scolarità bassa o che opera in particolari attività: usano la calcolarice normale.
La calcolatrice normale è quella che costa pochissimo e risponde subito, quella che piace a Epimeteo.
Un esempio: l’espressione 1 + 2 * 3 ha come risultato 9 e non 7 come si usa a scuola (prima media, probabilmente). Questo perché alla pressione del tasto * viene visualizzata l’espressione sospesa (1 + 2) e sul display compare il risultato corrente, 3. Gli utenti normali considerano corretto questo comportamento, non eseguono mai espressioni composte, con un’eccezione la catena di somme.
Una ditta locale ha vietato tutte le operazioni tranne la somma sul quaderno in cui registra le quantità in arrivo (no, non posso mettere l’immagine). Siccome i soci non si fidano troppo gli uni con gli altri verificano ognuno per conto loro le somme. Le due addette alla compilazione del quaderno (lavorano part-time) sono –immaginate voi😉

È un caso estremo ma la calcolatrice normale c’è e si usa quella. Ha due vantaggi: per il produttore è semplice da costruire, per l’utente è facile da usare.
Non è che il calcolo da sinistra dell’espressione 2^2^2^2^0 che ha dato il via a questa telelenovela ha un’origine simile? Si parla del Basic dell’epoca in cui sono comparsi i primi personal computer, la memoria era quella che era… Vedi il commento al post di Roberto Zanasi di Luca Pellacani, condivido (quasi interamente anche se sono meno estremista).
Poi essendo gli utenti abituati al modo usato dal Basic questo è stato adottato dai fogli di calcolo (supposizione mia, la Wiki metterebbe qui un citation needed) e ad altri linguaggi (MatLab e Octave).

Ho inoltre visto –qui in locale, non so quanto possa essere valido o ha solo valenza aneddotica– che gli studenti delle superiori con orientamento letterario non sanno (o non si curano) di fare calcoli semplicissimi; vengono messi in difficoltà da equazioni di primo grado, il famoso

un mattone pesa un kilo e mezzo mattone
quanto pesa il mattone?

Fine della premessa il post vuol’essere con confronto tra tools diversi per due casi semplici: -3^2 e 0^0.
IEEE 754 prescrive per i linguaggi 0^0 = 1.

Google
-3^2 = -(3^2) = -9
0^0 = 1

MathStudio
-3^2 = -9
0^0 = Indeterminate

Wolfram-Alpha
-3^2 = -9
0^0 = (undefined)

w0

Foglio di calcolo (Calc di Libre Office)
fc0
fc1
Basic
bas

Fortran
ftn

C
C

bc
bc

Calc
calc

Python
py

Octave
oct

Racket
rkt

Discussione: Ok, panico!😳
:mrgreen:

Ordine di valutazione degli operatori aritmetici

sg1Un po’ di materiale prima di continuare con argomenti simili a quello  dell’elevazione a potenza innescato da Roberto Zanasi. Finora ho pubblicato due post, qui e qui.

Io sono niubbassay, per fortuna il Web ha spesso la risposta alle domande prima ancora che queste vengano poste. Per esempio la Wiki😀 per l’ordine di valutazione degli operatori aritmetici ha una pagina molto dettagliata in inglese: Order of operations.
La versione in lingua italiana è molto più sintetica ma c’è tutto l’essenziale: Ordine delle operazioni.
Numerosi link rinvino ad approfondimenti e argomenti collegati. Ottimo davvero😀
Ci sono situazioni ambigue, per esempio i fisici (anche Feynman!) alle volte si discostano dai matematici. Un caso è raccontato qui.

Per quanto mi riguarda, in particolare per i linguaggi di programmazione, la soluzione (mia) è di usare le parentesi per risolvere le ambiguità. Anzi, usare le parentesi anche quando non necessarie ma chiarificanti quel che si sta facendo. Poi come già visto precedentemente ogni linguaggio ha le sue abitudini, controllare quando si scrive (molto più facile che fare il debug dopo).
A proposito in qualche punto la wiki (inglese) non usa un linguaggio da programmatori, p.es. per Smalltalk ma ci può stare; il senso è chiaro per tutti anche gli umani normali (generici medi)😉
Anche la pagina Exponentiation riporta il caso a^b^c; molto diversa la pagina in italiano.

Tratta anche il caso delle potenze di zero, compreso lo spinoso 0^0. Mi sa che questo caso sarebbe da verificare con i miei usuali linguaggi di programmazione. In questo caso c’è una specifica IEEE: IEEE 754.

Aggiornamento
Recentissimo un post —Potenza di potenza: commento sprint— di Gianluigi Filippelli (rockz! assay) che vede l’espressione in modo completamente e interamente differente, incompatibile con la Wiki & me (io): qua davvero ci vorrebbe un set di mate.

:mrgreen:

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Segui assieme ad altri 93 follower