[Java] Float Gleitkommazahlen werden abgeschnitten

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Bezebub, 5. Mai 2008 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 5. Mai 2008
    Float Gleitkommazahlen werden abgeschnitten

    Hallo,

    habe die Aufgabe in Java die Taylorreihe zu programmieren:
    Code:
    e^x = 1 + x/1! + x2 /2! + x3/3! + x4 /4! + ...

    Habe dieses Programm geschrieben:

    Code:
    package taylorreihe;
    
    import javax.swing.*;
    
    public class IO
    {
     static int fakultaet(int n)
     {
     return n == 0 ? 1 : n * fakultaet(n-1);
     }
     
     static float taylor(int n)
     {
     float e=1;
     int x=n;
     for (int i=1; i<=n; i++)
     {
     int f=fakultaet(i);
     float ealt = e;
     e=e+x/f;
     System.out.println("e = " + ealt + " + " + x + "/" + f);
     x=x*n;
     }
     return e;
     }
     static void ausgabe(int n)
     {
     String s;
     s = "e^" + n + " = " + taylor(n); 
     System.out.println( s ); 
     }
     public static void main(String[] args)
     {
     String s = JOptionPane.showInputDialog( "Bitte Zahl für Taylor-Reihe eingeben: " ); 
     int i = Integer.parseInt( s );
     ausgabe(i);
     }
    
    }

    Wenn ich dann als Beispiel "3" eingebe, gibt mir die Konsole dies aus:
    Code:
    e = 1.0 + 3/1
    e = 4.0 + 9/2
    e = 8.0 + 27/6
    e^3 = 12.0
    Wie man sieht ... sollte 9/2=4,5 geben, aber anscheinend zieht er die Nachkommastelle ab, das gleiche gilt für 27/6 ...

    Warum ist das so?

    Bin totaler Java Anfänger und habe C++ vorher programmiert und verstehe deshalb nicht, weshalb die Nachkommastellen abgeschnitten werden. Zumal e ja ein float ist ... :O
     
  2. 5. Mai 2008
    AW: Float Gleitkommazahlen werden abgeschnitten

    implizite typecasts,...
    e= 1.0 + 3/4

    java rechnet sich zuerst 3/4 aus. Hier stehen 2 Integerwerte. Java teilt also int 3 / int 4. Das ergebnis ist 0, vom typ integer. Als nächstes rechnet er 1.0 + 0 An dieser Stelle sieht java 2 unterschiedliche typen und wandelt die null automatisch in 0.0 um, nem double. Das Ergebnis der Addition ist also 1.0.
    jetz wird float e = double 1.0 gemacht, double wird zu float umgebogen.

    änder deinen code einfach von e=e+x/f; in e=e+(double)x/f;
    ^^ nennt sich expliziter typecast
    dann hast du double x / int f und java wandelt f in nen double um.. und das ergebnis ist auch von typ double

    hoff hab das einigermaßen präzise erklärt. Musst dich halt über typecasts informieren. Grad bei mathematischen anwendungen wo du mit vielen unterschiedlichen zahlentypen rechnest, ist das ultrawichtig
     
  3. 5. Mai 2008
    AW: Float Gleitkommazahlen werden abgeschnitten

    tag,
    habs nur mal überflogen .. aber du hast überall Integer variablen ..
    Integer haben keine Nachkommastellen ... nimm mal überall Double oder Float oder irgend etwas anderes als Integer auf jedenfall!

    falls weiter keine Lösung, einfach mal anschreibn dann schaus ich mir genauer an
     
  4. 5. Mai 2008
    AW: Float Gleitkommazahlen werden abgeschnitten

    Danke crunsh das hat geholfen.

    Sowas war in C++ nicht nötig. ^^
     
  5. 5. Mai 2008
    AW: Float Gleitkommazahlen werden abgeschnitten

    [X] Erledigt.

    ~closed~

    Mfg,

    Kolazomai
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.