Vergleich mit der Zahl 0 bei double Werten



  • Servus,

    ich habe zwei Vektoren, die double-Werte halten. Wenn das Paar 0 und 0 ist, sollen die Werte nicht berücksichtigt werden, wohl aber wenn das Paar etwa 5 und 5 ist. Wie mache ich das?

    Bis jetzt nahm ich oft den Absolutbetrag der Differenz ... aber das geht ja in dem Fall nicht. Eine Verränkung mit erst auf zwischen 0 und 0.5 prüfen und dann auf Differenz fällt mir ein, aber da gibts bestimmt was eleganteres oder ?



  • Jay1980 schrieb:

    Bis jetzt nahm ich oft den Absolutbetrag der Differenz ... aber das geht ja in dem Fall nicht. Eine Verränkung mit erst auf zwischen 0 und 0.5 prüfen und dann auf Differenz fällt mir ein, aber da gibts bestimmt was eleganteres oder ?

    Normalerweise prüft man bei fließkommazahlen, ob sie um einen Betrag kleiner als EPSILON vom Zielbetrag abweichen. Wie groß EPSILON ist, ist dabei dem Entwickler überlassen, verschiedene Frameworks bieten da verschiedene Konstanten für an. In deinem Fall wäre also die Abfrage etwa wie folgt:

    if (abs(vec1[i]) < EPSILON && abs(vec2[i]) < EPSILON)
    

    Manche bieten auch Funktionen wie bool near(doubla a, double b) , die das Ganze kapseln.



  • #include <vector>
    #include <limits>
    int main()
    {
    	using namespace std;
    	typedef pair<double, double> TPair;
    	typedef vector<TPair> TVec;
    	TVec vec;
    	vec.push_back( make_pair( 0.0, 0.0 ) );
    	vec.push_back( make_pair( 0.1, 0.0 ) );
    	double eps( numeric_limits<double>::epsilon() );
    	for( TVec::iterator it( vec.begin() ); it != vec.end(); ++it )
    	{
    		if ( ( fabs( it->first ) < eps ) && ( fabs( it->second ) < eps ) )
    		{
    			// ...
    		}	
    	}
    }
    

    Edit: Argh, schon wieder zu lahm. 😉


Log in to reply