testen ob zahl ganzzahl ist



  • Hallo !
    Ich habe folgendes Problem: ich muss überprüfen ob das Ergebnis einer Logarithmus-Berechnung eine ganze Zahl ist, sprich z.B. 2.0
    Mein Lösungsansatz dazu ist folgender:
    ich habe das Ergebnis in einer floating point-Variable gespeichert und runde das dann ab, d.h. ich caste den Wert in einen int-Wert.
    ist der int-Wert dann kleiner als der float-Wert, ist der Logarithmus keine Ganzzahl.
    Ist das Ergebnis bspw. 2.087, funktionert das auch richtig.
    Durch das Casten ist das Ergebnis auf 2 abgerundet worden, und durch den Vergleich mit dem ursprünglichen Wert 2.087 (oder so) bekomme ich heraus das das Ergebnis keine Ganzzahl ist.
    Allerdings funktioniert das nicht, wenn das originale Ergebnis eine Ganzzahl ist.
    bspw. log (8) zur Basis 2 würde, wenn das Ergebnis, nämlich 3, in einem float gespeichert würde, beim casten in ein int zu einer 2 !

    Ich müsste also wissen, wie ich korrekt abrunden kann, so das aus einer 3.0 keine 2 wird , sondern eine 3 bleibt, und das aus einer 2.5 abgerundet eine 2 wird.
    Wer hat Ideen wie man das regeln kann ? oder wie man besser feststellen kann, ob eine Zahl eine Ganze ist ?

    Vielen Dank
    santacruz



  • Dein Problem ist folgendes: Die interne Darstellung eines float/double-Wertes ist bekanntermaßen ja nicht genau. Nun kann es sein, dass eine Logarithmusfunktion den Wert 2.99999999999999997 oder so liefert, obwohl rein mathematisch eine 3 herauskommen müsste. Du hast also 2 Möglichkeiten.

    1. Du addierst vor dem cast eine kleine Zahl (z.B. 0.000001) drauf
    2. Du weichst auf genauere Alternativen aus (-> http://www.oonumerics.org/oon/#libraries ein wenig herunterscrollen).


  • jo das hab ich gemacht ...0.00001 addiert...
    haut hin
    danke


Anmelden zum Antworten