Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Über den Unterschied von Werten als Literalen und als Variablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.11.2004, 16:17 Uhr
~PhoemueX
Gast


Also ich habe folgendes Problem, das ich als Frage formulieren möchte:

Gibt es laut ANSI-Standard einen Unterschied (in der Auswertung) von einem Wert als zusammengesetzter Ausdruck und dem gleichen Wert als Wert einer Variablen?

Beantwortet diese Frage mal im Geiste und schaut euch DANN den folgenden Quelltext an:



C++:
#include <iostream>
using namespace std;
int main (void)
{
    double a = 0.6;
    double b = a*20.0;
    if((12.0) == (a*20.0))
    {
        cout << 12 << " = "<< a*20.0 << endl;
    }    
    else
    {
        cout << 12 << " != "<< a*20.0 << endl;
    }
    if(12.0 == b)
    {
        cout << 12 << " = "<< b << endl;
    }
    else
    {
        cout << 12 << " != "<< b << endl;
    }            
    cin.get();
}    



Ausgabe (kompiliert mit DEV-CPP):
12 != 12
12 = 12


Kann mir mal jemand erklären, wodurch dieser Unterschied entsteht??

Ich meine, a*20.0 und b sind doch GENAU der gleiche Wert (gut, dass erste ist kein L-Wert), aber trotzdem werden sie verschieden ausgewertet.

Danke schonmal

Phoemuex
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.11.2004, 16:33 Uhr
(un)wissender
Niveauwart


Nein.
Zu deinem Problem: das sind Ungenauigkeiten in der Fließkommaneinheit. Diese also niemals mit == vergleichen sondern immer mit einem Epsiolon und >,<.

C++:
const double epsilon = 0.00004;

//12.0 == a*20.0, mit a = 0.6
//Bereich [2*epsilon]
if(a*20.0 > 12.0 - epsilon && a*20.0 < 12.0 + epsilon )
//....


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 10.11.2004 um 16:33 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: