|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6265
|
[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 12:02. Motivo: avevo capito male |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6265
|
Ok, grazie.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:32.



















