cmath NaN Problem



  • Bei folgender Rechung bekomme ich als Ergebniss -nan(ind)

    (2 * m_pos.y - 2 * sqrt(-pow(m_pos.x - radius + i * m_abstand, 2)) + 2 * (m_pos.x - radius + i * m_abstand)*m_pos.x - pow(m_pos.x, 2) + 4 * m_radius) / 2
    

    Obiges ist "y1" der ABC-Formel und sieht vereinfacht so aus :

    (2yM + - 2* sqrt(-x² +2xxM - xM² + 4*r²)) / 2
    

    Zu den Datentypen:

    m_pos (sf::Vector2f)
    m_abstand (double)
    m_radius (float)
    i        (int)
    

    Wo liegt mein Fehler?



  • Woher hast du die Formel? Hier sieht die ABC-Formel ganz anders aus. Ansonsten ist mir noch aufgefallen, dass dein Radius nicht quadriert wird im Code, in deiner Formel allerdings schon.



  • Die Formel ist richtig. Ich will nämlich "alle" Punkte eines Kreises berechnen, dessen Mittelpunkt und Radius gegeben ist.
    Bei dem Radius hast du Recht, der muss noch quadriert werden.



  • numbo schrieb:

    ... sqrt(-pow(<irgendwas>, 2)) ...
    

    "Irgendwas" zum Quadrat ist >= 0, also positiv, was durch das vorangestellte "-" negativ wird. std::sqrt(x) gibt für x < -0 NaN zurück.
    Ich denke das ist die plausibelste Erklärung für dein Problem. Du solltest sicherstellen, dass deine Formel richtig ist und diese nicht unter Umständen erfordert, dass man mit komplexen Zahlen rechnet.
    So wie die Formel da steht, kann nur dann etwas anderes als NaN herauskommen, wenn "irgendwas" 0 ist.

    Gruss,
    Finnegan



  • numbo schrieb:

    Ich will nämlich "alle" Punkte eines Kreises berechnen, dessen Mittelpunkt und Radius gegeben ist.

    Ist das dann nicht diese Formel?



  • Nachtrag: Eigentlich ist das ja fast sogar deine Formel nur deutlich vereinfacht. Ich weiß nur nicht wie du auf 4*r^2 kommst. Ich hab hier nur r^2.



  • Danke für den Wiki Artikel 😉

    Jetzt geht alles


Log in to reply