wurzel von bigInteger

Status
Nicht offen für weitere Antworten.

andreas2505

Bekanntes Mitglied
Hallo,

ich habe hier eine Methode, die die Wurzel von einer BigInteger Zahl ziehen kann. Funktioniert auch soweit aber ich möchte nun, dass nur der Abgerundete Wert ausgegeben wird. Also z.B. sqrt(8) = 2 und nicht wie hier rauskommen würde 3. Kann mir da jemand helfen?

Java:
 public static BigInteger sqrt(BigInteger val){
        BigInteger two = BigInteger.valueOf(2);
        BigInteger a = BigInteger.ONE.shiftLeft(val.bitLength()/2);
        BigInteger b;
        do{
            b = val.divide(a);
            a = (a.add(b)).divide(two);
        }
        while (a.subtract(b).abs().compareTo(two) >= 0);
        return a;
    }
 

Ark

Top Contributor
Ohne dass ich den Code zum Wurzelziehen genau im Kopf habe: Bringt es vielleicht was, aus der do-while-Schleife eine while-Schleife zu machen?

Ark
 

Tharsonius

Bekanntes Mitglied
Bilde doch vom Ergebnis wieder das Quadrat. Wenn es kleiner als Deine Ausgangszahl ist, dann ist das Ergebnis bereits abgerundet, ansonsten einfach 1 abziehen.
 
P

PaulT

Gast
Ich brauchte auch einen sqrt für BigInteger, der niemals aufrundet.
Vermutlich ist der Code nicht optimal effizient, aber allzu langsam scheint er auch nicht zu sein.
Jedenfalls erledigt er den Job.

Java:
public static BigInteger sqrt(BigInteger x) {
        if (x.compareTo(BigInteger.ONE) < 0)
            return BigInteger.ZERO.subtract(BigInteger.ONE);
        BigInteger low, hi, tmp, two;
        low = BigInteger.ONE;
        two = hi = tmp = new BigInteger("2");
        while (x.divide(tmp).compareTo(tmp) > 0) {
            low = tmp;
            tmp = tmp.multiply(two);
        }   // verdopple tmp bis es grösser als die Wurzel ist
        if (x.divide(tmp).compareTo(tmp) == 0)
            return tmp;
        while (low.compareTo(tmp) != 0) {
            if (x.divide(tmp).compareTo(tmp) < 0)
                hi = tmp;
            else
                low = tmp;
            tmp = low.add(hi).divide(two);
        }   // Binary Search abwärts
        return tmp;
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D kleinste Wurzel finden Java Basics - Anfänger-Themen 9
B Rekursion Wurzel Java Basics - Anfänger-Themen 39
S Programm zum Einlesen einer Zahl und Ausgabe der Wurzel Java Basics - Anfänger-Themen 13
B Datentypen Wurzel auf n stellen nach dem Komma selber zeihen -> double zu schlecht Java Basics - Anfänger-Themen 19
L Applikativer Algorithmuss Wurzel ziehen Java Basics - Anfänger-Themen 10
R Problem mit Javaaufgabe wegen Wurzel Java Basics - Anfänger-Themen 7
Luk10 3. Wurzel mit Math.pow(x, (1/3)) Java Basics - Anfänger-Themen 2
T Wurzel berechnen Java Basics - Anfänger-Themen 6
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
N Datentypen Wurzel aus long ziehen Java Basics - Anfänger-Themen 4
J wurzel ziehen Java Basics - Anfänger-Themen 2
P Quadrat und Wurzel HILFE!!!!! Java Basics - Anfänger-Themen 13
S Frage zu Wurzel Funktion Java Basics - Anfänger-Themen 6
J Wurzel mit einer Folge brechnen Java Basics - Anfänger-Themen 5
K Annährende ganzzahlige Berechnung der Wurzel Java Basics - Anfänger-Themen 8
G wurzel durch probieren in einer schleife bekommen Java Basics - Anfänger-Themen 5
L k-te Wurzel aus a Berechnen! Java Basics - Anfänger-Themen 4
M Werte quadrieren und Wurzel ziehen Java Basics - Anfänger-Themen 22
R Wurzel ziehen? Java Basics - Anfänger-Themen 24
7 Wurzel ziehen geht nicht :-( Java Basics - Anfänger-Themen 23
P Wurzel ziehen Java Basics - Anfänger-Themen 17
S Dritte Wurzel berechnen Java Basics - Anfänger-Themen 7
T Wurzel aus einer Double-Zahl ziehen Java Basics - Anfänger-Themen 9
U programmfrage (wurzel ziehen) Java Basics - Anfänger-Themen 2
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
E Division von BigInteger soll Gelitkommazahl liefern Java Basics - Anfänger-Themen 46
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
D Wie vergleiche ich zwei BigInteger Werte? Java Basics - Anfänger-Themen 1
TheSorm erstellen von BigInteger Java Basics - Anfänger-Themen 24
A Long in BigInteger Java Basics - Anfänger-Themen 3
R BigInteger zusammensetzen Java Basics - Anfänger-Themen 8
G Methoden BigInteger Zufallszahlen erzeugen Java Basics - Anfänger-Themen 5
G Datentypen BigInteger */: Int Java Basics - Anfänger-Themen 5
B BigInteger , rechen problem Java Basics - Anfänger-Themen 8
M BigInteger mit Decimalzahlen? Java Basics - Anfänger-Themen 5
R Bestimmte Stellen eines BigInteger Java Basics - Anfänger-Themen 7
T String spliten und in BigInteger umwandeln Java Basics - Anfänger-Themen 3
L Compiler-Fehler Fehler bei BigInteger Java Basics - Anfänger-Themen 3
A Problem mit BigInteger und Schleife Java Basics - Anfänger-Themen 13
A Schleife mit BigInteger Java Basics - Anfänger-Themen 18
A umwandlung biginteger in int[] Java Basics - Anfänger-Themen 9
P Methode BigInteger-Array übergeben als Referenz Java Basics - Anfänger-Themen 6
P Bits bei BigInteger abprüfen Java Basics - Anfänger-Themen 2
D BigInteger potenzieren und anschließend Modulo Java Basics - Anfänger-Themen 7
A BigInteger? Java Basics - Anfänger-Themen 4
K String(ASCII) to BigInteger Java Basics - Anfänger-Themen 2
Z BigInteger Methoden und deren Übergabe Java Basics - Anfänger-Themen 3
G Quersumme berechnen (BigInteger) Java Basics - Anfänger-Themen 3
G array (BigInteger) durchsuchen Java Basics - Anfänger-Themen 2
G BigInteger Java Basics - Anfänger-Themen 6
I BigInteger + Array Java Basics - Anfänger-Themen 4
B BigInteger: Wert per Methode zuweisen Java Basics - Anfänger-Themen 3
G BigInteger zu int Java Basics - Anfänger-Themen 2
Linad Die Methode pow in der BigInteger Klasse Java Basics - Anfänger-Themen 4
N String zu BigInteger Java Basics - Anfänger-Themen 14
G BigInteger und Modulo Java Basics - Anfänger-Themen 3
M brauche Hilfe zu BigInteger Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben