Radici equazionione di secondo grado

Messaggioda tetravalenza » 31/05/2019, 21:32

Ho trovato questo interessante algoritmo che calcola le radici delle equazioni di secondo grado

Codice:
discriminant := b*b - 4*a*c
discr_root   := sqrt(discriminant)
factor       := - b - sign(b)*discr_root
r1           := factor / (2*a)
r2           := (2*c) / factor
return (r1, r2)


Purtroppo mi sfugge il significato di quel \(sign(b)\), cosa dovrebbe fare?
tetravalenza
Junior Member
Junior Member
 
Messaggio: 26 di 329
Iscritto il: 29/03/2019, 14:35

Re: Radici equazionione di secondo grado

Messaggioda apatriarca » 01/06/2019, 11:14

Quando \(4ac \approx 0,\) il discriminante \(\sqrt{b^2 - 4ac} \approx b\). Una delle due somme \(-b + \sqrt{b^2 - 4ac}\) e \(-b - \sqrt{b^2 - 4ac}\) è quindi potenzialmente soggetta a cancellazione distruttiva. In particolare, se \(b\) è positiva allora si ha cancellazione con \(+\) e quando \(b\) è negativa si ha cancellazione con \(-\).

L'idea è quindi quella di usare una espressione diversa in questo caso. Siccome
\[ \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \frac{-b \mp \sqrt{b^2 - 4ac}}{-b \mp \sqrt{b^2 - 4ac}} = \frac{2c}{-b \mp \sqrt{b^2 - 4ac}} \]
si può passare da una espressione che presenta cancellazione nell'altra che non lo presenta.

La scelta dipende dal segno di \(b\) ed è la ragione per l'uso di \(\text{sign}(b)\) nel tuo algoritmo.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5223 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Radici equazionione di secondo grado

Messaggioda tetravalenza » 05/06/2019, 17:50

Ciao, grazie per il chiarimento.
tetravalenza
Junior Member
Junior Member
 
Messaggio: 27 di 329
Iscritto il: 29/03/2019, 14:35


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite