Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema if
Forum - C/C++ - Problema if - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 20:49
Domenica, 30/06/2013
Grazie mille!:k:

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:40
Domenica, 30/06/2013
Testo quotato

Postato originariamente da pierotofy:

Testo quotato

Postato originariamente da Afa:
Intendi in questo modo?
Codice sorgente - presumibilmente C/C++

  1. if (fabs(a-0.2)<FLT_EPSILON)
  2. if (fabs(a-0.3)<FLT_EPSILON)
  3. if (fabs(a-0.5)<FLT_EPSILON)





Si.



Non sempre.

Le costanti 0.2, 0.4 e 0.5 sono considerate double. Nel caso specifico funziona perché sono numeri vicini ad 1.
Con valori più grandi, le cose cambiano; prova questo esempio:
Codice sorgente - presumibilmente C#

  1. ...
  2.     float b;
  3.     double c=56e10;
  4.     b=c;
  5.     if (fabs(c-b)<FLT_EPSILON)
  6.     {
  7.         cout << "\nUguale\n" << fabs(c-b) << " | " << FLT_EPSILON;
  8.     }
  9.     else
  10.     {
  11.         cout << "\nDiverso\n" << fabs(c-b) << " | " << FLT_EPSILON;
  12.     }
  13.     ...

Le cose vanno peggio con numeri molto piccoli:
Codice sorgente - presumibilmente C#

  1. ...
  2.     float b;
  3.     double c=5e-12;
  4.     b=6e-12f;
  5.     if (fabs(c-b)<FLT_EPSILON)
  6.     {
  7.         cout << "\nUguale\n" << fabs(c-b) << " | " << FLT_EPSILON;
  8.     }
  9.     else
  10.     {
  11.         cout << "\nDiverso\n" << fabs(c-b) << " | " << FLT_EPSILON;
  12.     }
  13.     ...

Il controllo considera c e b uguali.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:28
Lunedì, 01/07/2013
FLT_EPSILON vale per i float, se c'e' bisogno di usare precisione doppia allora usi DBL_EPSILON.


Il mio blog: https://piero.dev
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo