Cari amici,
siete tutti d'accordo che, per qualunque a e qualunque b<>0:
$\Large \frac{((a + b)^2 - (a^2 + 2ab))}{b^2}=1$
?
Ho provato a fare questo calcolo con Maxima e poi con Mathematica online e "escono" i seguenti risultati (errati).
Come lo spiegate?
Questo forum è una sezione del PORTALE DI BASE CINQUE
-
- Supervisore del sito
- Messaggi: 1828
- Iscritto il: ven mag 20, 2005 9:51 pm
- Località: Sestri Levante
- Contatta:
Perché ottimi programmi commettono questo errore?
Pace e bene a tutti.
Gianfranco
Gianfranco
Re: Perché ottimi programmi commettono questo errore?
L'introduzione di numeri in formato decimale ($b=1./a$ in figura) invoca l'uso dell'aritmetica approssimata
La formula proposta è particolarmente soggetta agli errori di arrotondamento: dovrebbe essere
$\left(a+b\right)^2-\left(a^2+2ab\right)=1000002.000001-1000002=0.000001$
ma il risultato invece $0.00000100001$ perché la rappresentazione in virgola mobile non è esatta.
Possiamo aumentare la precisione del calcolo aggiungendo zeri dopo la virgola
fino a che, con dieci zeri, questa diventa sufficiente a differenziare $0.000001$ da $0.00000100001$
Lo stesso vale per il secondo errore: con nove zeri
con dieci zeri
Inutile dire che se invochiamo l'aritmetica esatta ($b=1/a$) il problema non si pone
come non si pone per l'algebra simbolica
La formula proposta è particolarmente soggetta agli errori di arrotondamento: dovrebbe essere
$\left(a+b\right)^2-\left(a^2+2ab\right)=1000002.000001-1000002=0.000001$
ma il risultato invece $0.00000100001$ perché la rappresentazione in virgola mobile non è esatta.
Possiamo aumentare la precisione del calcolo aggiungendo zeri dopo la virgola
fino a che, con dieci zeri, questa diventa sufficiente a differenziare $0.000001$ da $0.00000100001$
Lo stesso vale per il secondo errore: con nove zeri
con dieci zeri
Inutile dire che se invochiamo l'aritmetica esatta ($b=1/a$) il problema non si pone
come non si pone per l'algebra simbolica
il panurgo
Principio di Relatività: $\mathbb{m} \not \to \mathbb{M} \, \Longleftrightarrow \, \mathbb{M} \not \to \mathbb{m}$
"Se la montagna non va a Maometto, Maometto NON va alla montagna"
Principio di Relatività: $\mathbb{m} \not \to \mathbb{M} \, \Longleftrightarrow \, \mathbb{M} \not \to \mathbb{m}$
"Se la montagna non va a Maometto, Maometto NON va alla montagna"
-
- Supervisore del sito
- Messaggi: 1828
- Iscritto il: ven mag 20, 2005 9:51 pm
- Località: Sestri Levante
- Contatta:
Re: Perché ottimi programmi commettono questo errore?
Grazie Panurgo!
Sapevo che risolvendo l'espressione letterale in forma simbolica questi programmi danno come risultato 1.
Ma non conoscevo bene il motivo di quegli errori quando eseguono il calcolo in forma numerica con particolari valori delle lettere.
Forse la cosa che mi ha stupito è questa: se un programma "sa potenzialmente" che il risultato di un'espressione (letterale) è sempre 1 (tranne casi estremi), perché dice che fa 0? Non potrebbe invece usare un po' di intelligenza in questi casi?
Ho provato a porre la stessa domanda alla chat di Bing (che forse si basa su chat gpt) e insiste a rispondere che il risultato è 1 senza neppure degnarsi di sostituire le variabili.
Ma forse neppure questo è un comportamento "intelligente".
Sapevo che risolvendo l'espressione letterale in forma simbolica questi programmi danno come risultato 1.
Ma non conoscevo bene il motivo di quegli errori quando eseguono il calcolo in forma numerica con particolari valori delle lettere.
Forse la cosa che mi ha stupito è questa: se un programma "sa potenzialmente" che il risultato di un'espressione (letterale) è sempre 1 (tranne casi estremi), perché dice che fa 0? Non potrebbe invece usare un po' di intelligenza in questi casi?
Ho provato a porre la stessa domanda alla chat di Bing (che forse si basa su chat gpt) e insiste a rispondere che il risultato è 1 senza neppure degnarsi di sostituire le variabili.
Ma forse neppure questo è un comportamento "intelligente".
Pace e bene a tutti.
Gianfranco
Gianfranco
Re: Perché ottimi programmi commettono questo errore?
Io so che alcuni linguaggi di programmazione (come ad esempio Python) eseguono i calcoli in binario, per cui quando gli si forniscono variabili in base 10, la doppia conversione introduce degli errori.
Questo non accade se ad esempio le varibili sono potenze di 2.
Potrebbe essere lo stesso anche per altri software?
Questo non accade se ad esempio le varibili sono potenze di 2.
Potrebbe essere lo stesso anche per altri software?
[Sergio] / $17$