Subato

Resource Files

Rational

In der Java-Standardbibliothek gibt es eine Klasse BigInteger für beliebig große ganze Zahlen. Machen Sie sich mit dieser Klasse vertraut.

Ergänzen Sie die Klasse Rational, die eine rationale Zahl statt mit zwei long-Werte für Zähler und Nenner mit zwei BigInteger-Objekten umsetzt, um die noch nicht implementierten Methoden.

Nehmen Sie eine möglichst genaue Annährerung für die Quadratwurzel.

Was stellen Sie bei der Berechnung von Wurzeln sehr großer Zahlen fest?.


import java.math.BigInteger; class Rational{ BigInteger zaehler; BigInteger nenner; Rational(BigInteger zaehler, BigInteger nenner){ this.zaehler = zaehler; this.nenner = nenner; kuerzen(); } public String toString(){ var ganzzahl = zaehler.divide(nenner); var rest = zaehler.remainder(nenner); var result = ganzzahl.equals(BigInteger.ZERO)?"":(ganzzahl+""); return result+(rest.equals(BigInteger.ZERO)?"":"\\frac{"+rest+"}{"+nenner+"}"); } @Override public boolean equals(Object other){ //TODO return false; } public void kuerzen(){ var gcd = zaehler.gcd(nenner); zaehler = zaehler.divide(gcd); nenner = nenner.divide(gcd); if (nenner.compareTo(BigInteger.ZERO) < 0 ){ nenner = nenner.negate(); zaehler = zaehler.negate(); } } Rational mult(Rational that){ //TODO return null; } Rational div(Rational that){ //TODO return null; } Rational add(Rational that){ //TODO return null; } Rational sub(Rational that){ //TODO return null; } double toDouble(){ //TODO return 0.0; } boolean lt(Rational that){ //TODO return false; } Rational betrag(){ //TODO return null; } Rational sqrt() { assert !lt(new Rational(BigInteger.ZERO,BigInteger.ONE)):"Wurzel auf negative Zahl"; return this.sqrt( this.add(new Rational(BigInteger.ONE,BigInteger.ONE)).div(new Rational(BigInteger.TWO,BigInteger.ONE) )) ; } Rational sqrt(Rational approx) { //TODO return null; } public static void main(String... args){ Rational d = new Rational(BigInteger.TWO,BigInteger.ONE); System.out.println(d.sqrt().toDouble()); d = new Rational(new BigInteger("4"),BigInteger.ONE); System.out.println(d.sqrt().toDouble()); d = new Rational(new BigInteger("9"),BigInteger.ONE); System.out.println(d.sqrt().toDouble()); d = new Rational(new BigInteger("25"),BigInteger.ONE); System.out.println(d.sqrt().toDouble()); } }
java
You are not logged in and therefore you cannot submit a solution.