Ergebnis 1 bis 3 von 3

Thema: Int vs. double Potenz in C++

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    pow() gibt dir eine Gleitkommazahl zurück, aber du möchtest eine Ganzzahl.
    Bei Gleitkommazahlen gibt es immer ungenauigkeiten. Das Ergebnis von pow(5,3) wird mit Sicherheit 124,999999999999999999999... heißen.
    Ein einfacher Cast auf einen Integer schneidet die Nachkommastellen einfach weg und du erhälst 124, anstatt den 125.
    Darum sollte man auch nie Gleitkommazahlen Gleichheit prüfen.
    Zum Thema kannst du dir dies durchlesen: http://de.wikipedia.org/wiki/Gleitkommazahl

    Also musst du den Wert runden. Ich weiß jetzt nicht aus dem Kopf, obs eine Rundungsfunktion gibt und Google konnte mir da auf die Schnelle auch nicht weiterhelfen, aber dies kann man auch mittels einer Addition lösen
    Code:
    int x = (int) (pow(a,b) + .5);

    Geändert von Whiz-zarD (29.12.2011 um 07:57 Uhr)

  2. #2
    Möglicherweise ist das ein Fehler deiner Laufzeitbibliothek. Also bei GCC (4.5.0) gibt es dieses Verhalten jedenfalls nicht.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •