Oppure

Loading
30/06/13 16:39
pierotofy
Postato originariamente da Afa:
Intendi in questo modo?
if (fabs(a-0.2)<FLT_EPSILON) 
if (fabs(a-0.3)<FLT_EPSILON) 
if (fabs(a-0.5)<FLT_EPSILON)



Si.
Il mio blog: piero.dev
30/06/13 18:49
Afa
Grazie mille!:k:
aaa
30/06/13 19:40
Poggi Marco
Postato originariamente da pierotofy:

Postato originariamente da Afa:
Intendi in questo modo?
if (fabs(a-0.2)<FLT_EPSILON) 
if (fabs(a-0.3)<FLT_EPSILON) 
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:
    ... 
    float b;
    double c=56e10;
    b=c;
    if (fabs(c-b)<FLT_EPSILON)
    {
        cout << "\nUguale\n" << fabs(c-b) << " | " << FLT_EPSILON;
    }
    else 
    {
        cout << "\nDiverso\n" << fabs(c-b) << " | " << FLT_EPSILON;
    }
    ...
Le cose vanno peggio con numeri molto piccoli:
    ... 
    float b;
    double c=5e-12;
    b=6e-12f;
    if (fabs(c-b)<FLT_EPSILON)
    {
        cout << "\nUguale\n" << fabs(c-b) << " | " << FLT_EPSILON;
    }
    else 
    {
        cout << "\nDiverso\n" << fabs(c-b) << " | " << FLT_EPSILON;
    }
    ...
Il controllo considera c e b uguali.
aaa
01/07/13 0:28
pierotofy
FLT_EPSILON vale per i float, se c'e' bisogno di usare precisione doppia allora usi DBL_EPSILON.
Il mio blog: piero.dev