domenica 12 ottobre 2014

Un bug in vari programmi(?): quanto vale 0^0?

Chiunque abbia anche basi minime in Analisi Matematica sa che la potenza 0^0 non ha nessun significato, in termini più precisi è una forma indeterminata come 0/0.
Chi avesse necessità di rivedere questo concetto può leggersi la pagina http://it.wikipedia.org/wiki/Forma_indeterminata 
Per quanto si possa pensare legittimo attribuire un valore “ad hoc” a questa espressione all’interno di un determinato programma, però la cosa dovrebbe essere nota agli utenti …
Questi sono i risultati ottenuti in vari modi sui pochi mezzi di cui dispongo:

Computer (S.O. Windows 8.1 Pro)

Fogli di calcolo:
  • Excel®: il calcolo diretto inserendo in una cella la formula =0^0 fornisce il risultato corretto #NUM! che è lo stesso che si ottiene inserendo =0/0. Invece eseguendo il calcolo attraverso una Sub in Vba come nel codice seguente: 
                          Dim a As Double
           a = 0 
           Dim b As Double 
           b = a ^ a 
           Range("A1").Value = b 
         
           si ottiene come risultato 1.
  • Libre Office: il risultato fornito dal calcolo diretto è 1.
  • Google Sheets: il risultato è 1. 
Altri programmi:
  • Calcolatrice Windows: il risultato è 1.
  • Microsoft Mathematics: il risultato è “indeterminate”, quindi corretto. 
Siti Web:

  • Wolfram Alpha: il risultato è “indeterminate”, quindi corretto.
  • Bing motore di ricerca: il risultato è 1.
  • Google motore di ricerca: il risultato è 1.
  • App di Google Chrome: Calculator (http://web2.0calc.com/): il risultato è “indeterminate”, quindi corretto.
  • App di Google Chrome: Scientific Calculator (chrome-extension: //npoipmeppdioagbkigdlnpmjphnolaog/index.html): il risultato è 1.
  • App di Google Chrome: GeoGebra foglio di calcolo (http://web.geogebra.org/chromeapp/#) : il risultato è 1. 
Pagina con codice Javascript

Il seguente codice salvato in un file HTML


fornisce come risultato 1 (provato su IE e Chrome)

Test su vari linguaggi con VS 2013 (applicazioni console)

 • VB.net: il codice seguente

Dim a As Double = 0 
Dim b As Double 
b = a ^ a 
Console.WriteLine("Il risultato di 0^0 é: " CStr(b)) 
Console.ReadKey() 

permette di generare un eseguibile che fornisce 1 come risultato.

• C#: il codice seguente

int a = 0; 
Double b; 
b = a ^ a; 
Console.WriteLine("Il valore di 0^0 è: " + b.ToString()); 
Console.ReadKey(); 

permette di generare un eseguibile che fornisce 0 come risultato.

• F#: il codice seguente

open System [
let main argv = 
let a =0.0 
let b=a**a 
let c=Convert.ToString(b) 
printfn "%A" "Il risultato di =0^0 è: " 
printfn "%A" c 
let c=Console.ReadKey(true) 
0 // return an integer exit code 

permette di generare un eseguibile che fornisce 1 come risultato. 

• C++: credo di aver capito che l’operatore potenza aritmetica non è implementato e quindi non possiamo fare delle generalizzazioni come sopra (salvo miei errori…)

Applicazioni su Android

Poiché conosco questo S.O. molto superficialmente posso solo dire che la calcolatrice standard fornita all’acquisto del mio smartphone fornisce come risultato 1, mentre altre calcolatrici portano al risultato esatto.

Nessun commento:

Posta un commento