Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  float-Vergleich mit sich selbst  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Eisflamme
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.06.2009
Beiträge: 2875
Beitrag Eisflamme Mitglied 17:46:13 26.07.2012   Titel:   float-Vergleich mit sich selbst            Zitieren

Hallo,

wenn ich einen float mit sich selbst vergleiche, ergibt der Ausdruck dann true, wenn es sich um eine "normale" Zahl (also nicht NaN, +-inf, IND o.ä.) handelt?

Sind operator== und operator!= beide definiert für diese Operation?

_________________
www.mihahome.de - Texte zu Englisch, Geographie sowie Präsentationen und Lesenswertes
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17956
Beitrag SeppJ Moderator 17:49:06 26.07.2012   Titel:              Zitieren

f != f dann und nur dann, wenn f NaN ist.

Aber Achtung: Ein solcher Vergleich könnte wegoptimiert werden, üblich ist daher:
C++:
bool my_isnan(double value)
{
    volatile double d = value;
    return d != d;
}

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
Eisflamme
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.06.2009
Beiträge: 2875
Beitrag Eisflamme Mitglied 17:51:10 26.07.2012   Titel:              Zitieren

Kann ich irgendwie prüfen, ob der float irgendwas Nicht-Zahliges (also nicht nur NaN sondern auch inf, IND usw.) ist?

_________________
www.mihahome.de - Texte zu Englisch, Geographie sowie Präsentationen und Lesenswertes
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17956
Beitrag SeppJ Moderator 17:55:52 26.07.2012   Titel:              Zitieren

Eisflamme schrieb:
Kann ich irgendwie prüfen, ob der float irgendwas Nicht-Zahliges (also nicht nur NaN sondern auch inf, IND usw.) ist?
Ja. Aber hast du denn weder C++11 noch Boost noch eine C99-Standardbibliothek? Die haben das nämlich alle schon eingebaut.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
Eisflamme
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.06.2009
Beiträge: 2875
Beitrag Eisflamme Mitglied 18:02:05 26.07.2012   Titel:              Zitieren

Hab alles, stelle mich nur zu blöd an das zu finden. :( Habe mit numeric_limits rumgespielt, aber das hilft nicht.

_________________
www.mihahome.de - Texte zu Englisch, Geographie sowie Präsentationen und Lesenswertes
camper
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5794
Beitrag camper Mitglied 18:03:24 26.07.2012   Titel:              Zitieren

Eisflamme schrieb:
Kann ich irgendwie prüfen, ob der float irgendwas Nicht-Zahliges (also nicht nur NaN sondern auch inf, IND usw.) ist?
C++:
!isfinite(x)
aus <cmath>
Eisflamme
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.06.2009
Beiträge: 2875
Beitrag Eisflamme Mitglied 18:05:35 26.07.2012   Titel:              Zitieren

Dankesehr! :)

Sorry nochmal. Ich kriege gerade die einfachsten Dinge nicht gebacken (geschweige denn über Google gefunden). Ich gestatte euch Facepalms, Kopfschütteln und Augendrehen über mich.

_________________
www.mihahome.de - Texte zu Englisch, Geographie sowie Präsentationen und Lesenswertes


Zuletzt bearbeitet von Eisflamme am 18:05:48 26.07.2012, insgesamt 1-mal bearbeitet
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 17749
Beitrag Bashar Mitglied 18:16:28 26.07.2012   Titel:              Zitieren

SeppJ schrieb:
Aber Achtung: Ein solcher Vergleich könnte wegoptimiert werden

Widerspricht das nicht der as-if-Regel?

_________________
OSL♥
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17956
Beitrag SeppJ Moderator 18:30:09 26.07.2012   Titel:              Zitieren

Bashar schrieb:
SeppJ schrieb:
Aber Achtung: Ein solcher Vergleich könnte wegoptimiert werden

Widerspricht das nicht der as-if-Regel?
Bei Fließkommaoperationen wird dies auf härteren Optimierungsstufen (GCC z.B. ffast-math, ffinite-math & Co, muss man aber alles händisch aktivieren) auch mal ignoriert. Dann funktioniert die volatile-Operation (hoffentlich, ich habe es nicht getestet) immer noch. Bei nicht so harten Optimierungen sollte (wieder nicht getestet, nur geschätzt, dass es da sowieso nicht viel zu optimieren gibt) es trotz volatile ungefähr gleich schnell sein (die Pipeline wird eventuell nicht perfekt ausgelastet, weil volatile strenger ist, was Umordnungen angeht).

Natürlich ist der ganze Punkt dieser Optimierungen, dass sie den Fließkommastandard brechen dürfen, insofern ist das volatile bei genauerem Nachdenken doch eher unnötig, da man diese Optimierungen sowieso nicht nutzen kann, wenn NaN vorkommen kann.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
camper
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5794
Beitrag camper Mitglied 18:41:18 26.07.2012   Titel:              Zitieren

-ffast-math führt allerdings zu nicht konformen Programmen. Um ehrlich zu sein, verstehe ich sowieso nicht, wieso jemand diese Option benutzen würde. Entweder ist sie performanceirrelevant, weil kaum entsprechende Berechnungen durchgeführt werden, oder aber das resultierende Programm ist mit hoher Wahrscheinlichkeit defekt.
c++.de :: C++ (auch C++0x und C++11) ::  float-Vergleich mit sich selbst  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.