Rationale Zahl mit natürlicher Zahl potenzieren



  • Moin!

    Folgendes: Wenn ich mittels Math.Pow(x, y) eine natürliche Zahl (sowohl positiv als auch negativ) mit einer anderen natürlichen Zahl potenziere, dann kommt das richtige Ergebnis raus.
    Wenn ich nun aber meinetwegen Math.Pow(0.5, 3) berechne, dann kommt dabei nicht 0.125 raus, sondern 125. So ganz passt mir das nicht. Was mach ich falsch, oder was kann ich anders machen, damit die richtigen Ergebnisse kommen??



  • Hmm, ok, in einem spontanen Anfall von Kreativität bin ich darauf gekommen:

    double phk = Math.Pow(p, k);
    while(phk > 1)
    {
       phk = phk / 10;
    }
    

    Aber das kann es doch nicht sein, oder?

    Und dann noch was anderes: Die Math Klasse stellt ja nicht sonderlich viele Funktionen bereit. Gibts da vielleicht noch irgendwie eine Erweiterung? So für Fakultäten, Binomialkoeffizienten, etc.?



  • Machst Du vielleicht doch etwas falsch, denn bei mir (VS.NET) kommt bei Math.Pow(0.5, 3) das richtige Ergebnis raus.

    [EDIT] Hier gibt es eine Math Klasse, vielleicht hilft sie Dir. [/EDIT]



  • Ja, stimmt. Das Problem scheint schon irgendwo vorher zu liegen.
    Kann man zwei double Zahlen nicht einfach subtrahieren? Da scheint völliger Mist rauszukommen...
    Ich kriech n Rohr. 😮



  • Jan schrieb:

    Kann man zwei double Zahlen nicht einfach subtrahieren? Da scheint völliger Mist rauszukommen...

    Doch eigentlich schon. Kannst ja mal etwas mehr Code zeigen.



  • double p = System.Convert.ToDouble(Console.ReadLine());
    double q = 1.0 - p;
    double pot = Math.Pow(q, 5);
    Console.Write(pot);
    

    Eingabe: 0.5
    Ausgabe: -1024



  • Gibt mal 0.5 und 0,5 ein, ich habe die Ausgaben eingebaut die Dir Klarheit verschaffen sollten.

    double p = System.Convert.ToDouble(Console.ReadLine());
    Console.WriteLine(p.ToString());
    double q = 1.0 - p;
    Console.WriteLine(q.ToString());
    double pot = Math.Pow(q, 5);
    Console.Write(pot);
    


  • Pah... Tatsache... mit einem Komma klappts. Wie bescheuert, da hätt ich auch drauf kommen können... 🙄 thx!



  • Jan schrieb:

    Pah... Tatsache... mit einem Komma klappts. Wie bescheuert, da hätt ich auch drauf kommen können... thx!

    Da bin ich das erste mal auch dran verzweifelt.

    Vielleicht ist es dir mitlerweile selbst aufgefallen, aber das hier:

    Jan schrieb:

    Hmm, ok, in einem spontanen Anfall von Kreativität bin ich darauf gekommen:

    double phk = Math.Pow(p, k);
    while(phk > 1)
    {
       phk = phk / 10;
    }
    

    Aber das kann es doch nicht sein, oder?

    Hätte aber eh nicht funktioniert, denn wenn dein Ergebnis 0,0005 gewesen waere hättest du hier 0,5 raus bekommen.



  • Entyl_Sa schrieb:

    Hätte aber eh nicht funktioniert, denn wenn dein Ergebnis 0,0005 gewesen waere hättest du hier 0,5 raus bekommen.

    Es kam ja aber immer etwas >0 raus. Von daher half es schon. Aber das Problem hat sich ja nun eh erledigt. Es kommt das raus, was rauskommen soll.

    edit:
    Mit deiner Rechnung hast du dich ja wohl auch ein bisschen vertan. 0,1 / 10 ist 0,01! Zumal 0,..... nicht größer als 1 ist, da wäre gar nichts mit passiert. :p



  • Obwohl die eigentliche Sache erledigt ist setzt sich gerade mein Rechthabergen durch.

    pow(0.5, 4)=0,0625

    bei dir waera aber folgendes grechnet worden:

    pow(5, 4) = 625

    Das teilst du jetzt so lange durch 10 bis es kleiner 1 ist. Bekommst also 0,625 als Ergibnis.

    Gruß Entyl Sa



  • Achso, gut, wenn du das so meinst, dann ist das natürlich richtig. Hast dich etwas missverständlich ausgedrückt.


Anmelden zum Antworten