Übung zu Math.pow Hilfe !!??

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Übung zu Math.pow Hilfe !!??

    Hi leute!!!

    Hab da 2 Kleine Probleme zu der Anweisung Math.pow in Java und hoffe Ihr könnt mir helfen....

    Also 1. Problem:

    Ich wollte Heute auf meinem Desktop Pc ein Programm mit Eclipse schreiben das mir folgenden Funkion löst

    y = log(/n-m/x)


    dabei benötige ich ja die Anweißung Math. dabei ist mir aber aufgefallen das meinen eclipse aus irgeneinem grund die passende Bibliothek fehlt :(

    hab schon geschaut ob ich irgenwo im inet die math.jar finde aber keinen Erfolg gehabt jetzt ist meine frage wo bekomm ich diese her oder liegt es vieleicht an einer Einstellung in eclipse ? Weil Math. sollte ja ohne probleme funzen da die ja schon von grund auf dabei ist ....

    bin jetzt an meinen Laptop gewechselt wo bei wir bei dem
    2. Problem wären :

    Hab hier nun eine Aufgabe die lautet folgender maßen :

    Definieren Sie die beiden Variablen zaehler und nenner vom Typ float und
    initialisieren zaehler mit 2,5 x 10°27f sowie nenner mit 3,4 x 10° -12f. Lassen Sie sich
    den Quotienten von beiden mit System.out ausgeben und studieren das Verhalten.


    ° soll hoch bedeuten also hoch 27 und hoch -12

    Also tat ich folgendes :

    float zaehler = 2.5 * a;
    doubel a = Math.pow(10,27);

    usw...

    So jetzt geht dies aber gar nicht so also zu erklarung erstmal die double a habe ich initialisiert weil Math.pow ja nur in verbindung mit doubel funzt aber nun
    geht ja die Zeile drüber float zaehler = 2.5 * a nicht weil cannot convert from doubel to float
    aber ich komm ja nur über diesen weg zu dem was in der Aufgabe steht natürlich könnte ich das auch vorher mitm taschenrechner ausrechnen aber ist ja sich nicht sinn der übung hat jemand vieleicht ne Idee ?

    Viele Grüße

    ps: Wenn ich irgenwelchen falschen Ausdrücke gebraucht hab also zb. Anweißung und initialisierung usw dann verbessert mich ruhig bin dankbar.....
  • "Anweißung Math"
    Das ist wirklich falsch ausgedrückt. Math ist eine Klasse die dir Methoden zum rechen zur Verfügung stellt. Bei den restlichen Ausdrücken bin ich nicht so pingelig.

    Zu 1.
    java.lang.Math ist eine Klasse die standardmäßig mit Java daher kommt. Solange du das JDK benutzt ist die Klasse auch dabei. Für das Paket "java.lang" wird eigentlich auch kein Import benötigt. Aber vielleicht versuchst du es trotzdem mit einem. Wenn es trotzdem nicht geht, dann liegt es wohl an deinen Eclipse-Einstellungen.

    Zu 2.
    Du kannst double zu real casten. Double ist wie real nur braucht es mehr Speicher und ist dafür genauer.
    real a = (real)Math.pow(10,27);
    Das in der Klammer nennt man einen Cast. Natürlich kann dadurch der Wertebereich verlassen werden, was zu falschen Ergebnissen führt. Aber es ist ja in der Aufgabenstellung genau so gefordert. Demnach sollte es ok sein.
  • Erstmal danke für deine Antwort hafner !

    Aber ich glaube du musst etwas genauer werden scheinbar bin ich zu blöd......
    real ???? sorry von dem Datentyp hab ich noch nie etwas gehört wird auch von eclipse nicht als solcher anerkannt ????? ?(

    So hab das Problem nun auch ohne real gelöst in dem ich einfach von doubel nach float zurück gecastet habe also eine eingeschränkte Konvertierung vorgenommen hab (muss wohl vorhin auf den Schlauch gestanden haben das ich nicht gleich darauf gekommen bin )
    das sieht nun so aus :

    Quellcode

    1. public class Infinity {
    2. public static void main(String[] args)
    3. {
    4. double a = Math.pow(10,27);
    5. double b = Math.pow(10,-12);
    6. float zaehler = 2.5f *(float) a;
    7. float nenner = 3.4f * (float) b;
    8. System.out.println(zaehler/nenner);
    9. }
    10. }
    Alles anzeigen


    Nun ist aber Das ausgegebenen Ergebnis ziehmlich Interesant es wird nämlich Infinity = Unendlich ausgeben
    jedoch müsste sich das Ergebins doch trotzdem bis zu einer bestimmten Stelle ausgegben lassen also der Windows Rechner gibt zumindest folgendes aus
    -1470588235294117647058823529,4118
    Meine Frage nun warum wird das Ergebnis nicht zumindest bis zu einer bestimmten Stelle ausgegeben wie beim Windows Rechner
    bzw was soll mir diese Aufgabenstellung bzw das Ergebnis nun sagen ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Manuchao ()

  • Sorry, real war die Bezeichnung für float in einer anderen Programmiersprache (War es Pascal?). Ich habe mit real float gemeint, wie du ja auch schon richtig erraten hast.

    Dein Windows-Rechner kann ja auch nicht rechnen. :)
    -1470588235294117647058823529,4118 ist Quatsch.

    double a = Math.pow(10,27);
    ist etwas sehr sehr großes
    double b = Math.pow(10,-12);
    ist etwas sehr seht kleines fast bei 0.

    float zaehler = 2.5f *(float) a;
    float nenner = 3.4f * (float) b;
    Der Faktor ändert an den Tatsachen dann auch nicht mehr viel.

    zaehler/nenner
    ergibt somit etwas extrem großes.

    -1470588235294117647058823529,4118
    kann gar nicht stimmen, da eine positive Zahl durch eine positive Zahl IMMER positiv ist. Die negative Zahl kommt hier zu stande, weil der Wertebereich von float überläuft. Das fängt der Windows-Rechner offenbar nicht ab und gibt eine falsche Zahl aus. Das habe ich ja schon erwartet: "Natürlich kann dadurch der Wertebereich verlassen werden, was zu falschen Ergebnissen führt."

    Das float den Wert Infinity annehmen kann (und wohl auch damit rechnen, da es ja float ist) ist neu für mich. Das finde ich aber gut. Da hat sich wohl einer mal Gedanken gemacht. Wie kommt es aber zu Infinity und nicht zu der richtigen gigantischen Zahl? Auch das hat natürlich etwas mit dem Wertebereich von float zu tun. Auch hier kommt es zu einem Überlauf, da float so eine große Zahl nicht darstellen kann. Aufgrund der Bruchrechnung wird hier wohl gesagt, das der Nenner gegen 0 läuft, was das Ergebnis gegen unendlich laufen lässt. So kommt diese Ausgabe zustande. Bedenke immer, dass double und float (noch schlimmer als double) ungenau rechnen. Aufgrund des Speicherverfahrens dieser Typen (es wird eine Zahl z.B. 3 gespeichert und ihr Exponent 3 um z.B. 3000 darzustellen) wirkt sich die Ungenauigkeit besonders aus wenn man sehr große Zahlen mit sehr sehr kleinen kombiniert.
    Für genauere Rechnungen gibt es BigDecimal.