|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6019
|
[C++] Errori floating point
Ciao ragazzi,
qualcuno sa dirmi perchè se scrivo il codice in questa maniera: Codice:
#include <iostream> #include <iomanip> using namespace std; int main (){ float a = 3.21332431; float x = 4.54223534; float y = 6.5443432; float first = (1.0 - x)*a + x*y; float second = a + x*(y-a); cout << " first "<< setprecision(20) << (1.0 - x)*a + x*y << endl; cout << " second "<< setprecision(20) << a + x*(y-a) << endl; return 0; } Codice:
first 18.343595218238760935 second 18.343595504760742188 Codice:
#include <iostream> #include <iomanip> using namespace std; int main (){ float a = 3.21332431; float x = 4.54223534; float y = 6.5443432; float first = (1.0 - x)*a + x*y; float second = a + x*(y-a); cout << " first "<< setprecision(20) << first << endl; cout << " second "<< setprecision(20) << second << endl; return 0; } ![]() Codice:
first 18.343595504760742188 second 18.343595504760742188 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Nel primo caso stampi direttamente
(1.0 - x)*a + x*y quel 1.0 è un double (float sarebbe 1.0f), quindi quel pezzo viene calcolato con precisione double. Nel secondo caso invece lo salvi in first, facendogli perdere precisione (da double a float). Ultima modifica di ||ElChE||88 : 12-07-2009 alle 11:02. Motivo: avevo capito male |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6019
|
Ok, grazie.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:00.