Ich möchte ein Programm in Java schreiben, die eine Zahl auf eine Potenz erhöht, aber ohne Math.pow ausführen wird. Das Programm sollte generisch sein, um auch Brüche einzubeziehen. Die Schleifeninkrementmethode wird um 1 erhöht, was für Ganzzahlen zulässig ist. aber keine Fraktionen. Bitte schlagen Sie eine generische Methode vor, die für mich hilfreich wäre.Implementieren generische Power-Funktion ohne Math.pow in Java
Antwort
Denken Sie darüber nach, was eine Power-Funktion tun sollte.
Mathematisch: x^5 = x * x * x * x * x oder ((((x * x) * x) * x) * x)
Innerhalb Ihrer for-Schleife, können Sie der * = Operator, um die Operation zu erreichen, die oben passiert.
Wie gehen Sie mit Brüchen um? Java hat keinen integrierten Fraktionstyp. Es speichert Dezimalstellen, die auf die gleiche Weise wie Ganzzahlen berechnet werden (mit anderen Worten, x * x arbeitet mit beiden Typen). Wenn Sie eine spezielle Klasse für Brüche haben, benötigt Ihre Schleife nur zwei Schritte: einen, um den Zähler zu multiplizieren, und einen, um den Nenner zu multiplizieren.
Zuerst beobachten, dass pow (a, x) = exp (x * log (a)).
e x = 1 + x + x /2:
Sie können Ihre eigene exp() Funktion mit der Taylor series Erweiterung für e x implementieren! + x /3! + x /4! + x /5! + ...
Dies funktioniert bei nicht ganzzahligen Werten von x. Je mehr Terme du eingibst, desto genauer wird das Ergebnis sein.
Beachten Sie, dass Sie bei Verwendung einiger algebraischer Identitäten nur auf die Reihenerweiterung für x im Bereich 0 < x < 1 zurückgreifen müssen. exp (int + frac) = exp (int) * exp (frac), und es ist nicht notwendig, eine Reihenentwicklung für exp (int) zu verwenden. (Sie multiplizieren es einfach, , da es eine ganzzahlige Potenz von e = 2.71828 ist ...).
Ebenso können Sie log (x) mit einer dieser Serie Erweiterungen implementieren:
log (1 + x) = x - x /2 + x /3 - x /4 + ...
oder
log (1-x) = -1 * (x + x 2 /2 + x 3 /3 + x 4 /4 + ...)
Aber diese Serien konvergieren nur für x im Intervall -1 < x < 1.Also für Werte von einem außerhalb dieses Bereichs liegt, haben Sie vielleicht die Identität verwenden
log (pq) = log (p) + log (q)
und haben einige wiederholte Teilungen durch e (= 2.71828 ...) bringen ein runter in einen Bereich wo die Serienverbreiterung konvergiert. Wenn zum Beispiel a = 4, müssten Sie x = 3 nehmen, um die erste Formel zu verwenden, aber 3 liegt außerhalb des Konvergenzbereichs. So beginnen wir Faktoren e Dividieren aus:
4/e = 1,47151 ...
log (4) = log (e * 1,47151 ...) = 1 + log (1,47151 ...)
Jetzt können wir nehmen x = .47151 ..., die im Bereich der Konvergenz ist, und log (1 + x) mit der Reihenentwicklung auszuwerten.
- 1. Generische Schnittstelle in Java implementieren
- 2. Math.pow() in Java
- 3. Java Math.pow (x, 2.0) vs Math.pow (x, 2.0000001) Leistung
- 4. Scala, kann generische Java-Methode nicht implementieren
- 5. generische Methode in Java ohne generisches Argument
- 6. Generische Baumimplementierung in Java
- 7. Wie kann ich meine eigene generische Sammlung in Java implementieren?
- 8. Java math.pow() gibt falsche Antwort zurück
- 9. generische DAO in Java
- 10. Implementieren Sie generische Methoden von einer Schnittstelle ohne Unordnung?
- 11. Wie generische php Ausnahmehandler implementieren
- 12. C# generische Klasse implementieren Fehler
- 13. Generische Methode in Java
- 14. Wie generische Durchschnittsfunktion in Scala implementieren?
- 15. Java generische Methoden verstehen
- 16. Wiederverwendung von Java generische Auflistungen in Scala ohne Merkmal Objekt
- 17. Java generische Felddeklaration
- 18. Understanding Java generische Methode
- 19. Java - Generische statische Methoden
- 20. JavaScript-Implementierung von Math.pow
- 21. Math.Pow einen ganzzahligen Wert
- 22. Math.Pow berechnet nicht korrekt
- 23. Generische Lambdas in Java erstellen
- 24. Java: Generische Methode für Enums
- 25. Wie implementieren Sie diese generische Klasse?
- 26. C# richtigen Weg implementieren generische Methode
- 27. Java Generische Typenvariablen
- 28. Java generische Schnittstelle Leistung
- 29. Java generische Art Argumente
- 30. Java generische Felder
Warum möchten Sie das tun? Ist es Hausaufgaben? – thejh
"Ohne" ist ein Tag? Heiliger Strohsack. –
@Mark Peters: Aber nur mit 26 markierten Fragen. – thejh