2010-06-16 7 views
11

¿cómo puedo crear un método que devuelva el sqrt de un nunber dado?¿Cómo calculo la raíz cuadrada de un número sin usar builtins?

Por ejemplo: sqrt (16) devuelve 4 y sqrt (5) devuelve 2.3 ...
estoy usando Java y sé la función API Math.sqrt() pero necesito el método en sí.

+2

La única razón que se me ocurre es la tarea, por lo que he sugerido thisin las etiquetas. –

+0

Google for "Método de Newton" –

+0

Lea el libro "Recetas numéricas en C" – Fanatic23

Respuesta

10

Probablemente tengas que hacer uso de algún método de aproximación.

Tenga una mirada en

Methods of computing square roots

+1

+1 para el enlace – INS

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia . Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/18304161) –

7

aquí hay algo para pensar:

Para calcular una raíz cuadrada, sólo tiene que encontrar un número que, elevado a la potencia de 2 (aunque simplemente multiplicar por sí mismo es mucho más fácil programáticamente;)) devuelve la entrada.

Entonces, empiece con una suposición. Si el producto es demasiado pequeño, adivina más grande. Si el nuevo producto es demasiado grande, lo ha reducido, adivine en algún punto intermedio. Ves a dónde voy ...

Dependiendo de su necesidad de precisión y/o rendimiento, hay, por supuesto, muchas maneras. La solución que se insinúa en esta publicación no es de ninguna manera la mejor en ninguna de esas categorías, pero le da una pista sobre un camino a seguir.

+0

¡Sin embargo, eso requerirá mucho procesamiento! – ivorykoder

+0

@ivorykoder: Claro que sí. Pero hay muchos métodos para elegir la próxima estimación de forma inteligente, con el fin de reducir rápidamente el tamaño del intervalo, principalmente se reduce a poder excluir la mayor cantidad posible del intervalo restante, independientemente de en qué lado de la conjetura esté la respuesta. a. –

5

Uno que he inventado (o reinventé si puede ser el caso) es la siguiente:

Siguiente Guess = ((Guess) + N)/(2 × Guess)

Ejemplo:

raíz cuadrada de 10, primera suposición es, digamos, 10:

Guess1 = (100+10)/20=5.5 

Guess2 = (30.25+10)/(2*5.5)= 3.6590909090... 

Guess3 = (13.3889+10)/(3.65909090*2)=3.196005082... 

etc.

le consigue 3.16227766 ... más o menos.

Esto es en realidad una versión simplificado de mi método original

Guess + ((N + Guess)/(2 × Guess))

que parece una terrible mucho como Bakhshali's method.

7

Esta versión usa el método de Newton, el método más común para calcular sqrt, y no verificará que la entrada sea en realidad un número entero, pero debería resolver su problema muy bien.

int num = Integer.parseInt(input("Please input an integer to be square rooted.")); 
while(0.0001 < Math.abs(guess * guess - num)){ 
    guess = (guess + num/guess)/2; 
} 
output(Integer.toString(guess)); 

La segunda línea comprueba qué tan cerca está la conjetura actual del resultado verdadero, y si está lo suficientemente cerca rompe el ciclo.La tercera línea usa el Método de Newton para acercarse cada vez más al verdadero valor de sqrt. Espero que esto ayude. :) programa Java

12

para averiguar la raíz cuadrada de un número determinado sin el uso de funciones incorporadas

public class Sqrt 
{ 

    public static void main(String[] args) 
    { 
    //Number for which square root is to be found 
    double number = Double.parseDouble(args[0]); 

    //This method finds out the square root 
    findSquareRoot(number); 

} 

/*This method finds out the square root without using 
any built-in functions and displays it */ 
public static void findSquareRoot(double number) 
{ 

    boolean isPositiveNumber = true; 
    double g1; 

    //if the number given is a 0 
    if(number==0) 
    { 
     System.out.println("Square root of "+number+" = "+0); 
    } 

    //If the number given is a -ve number 
    else if(number<0) 
    { 
     number=-number; 
     isPositiveNumber = false; 
    } 

    //Proceeding to find out square root of the number 
    double squareRoot = number/2; 
    do 
    { 
     g1=squareRoot; 
     squareRoot = (g1 + (number/g1))/2; 
    } 
    while((g1-squareRoot)!=0); 

    //Displays square root in the case of a positive number 
    if(isPositiveNumber) 
    { 
     System.out.println("Square roots of "+number+" are "); 
     System.out.println("+"+squareRoot); 
     System.out.println("-"+squareRoot); 
    } 
    //Displays square root in the case of a -ve number 
    else 
    { 
     System.out.println("Square roots of -"+number+" are "); 
     System.out.println("+"+squareRoot+" i"); 
     System.out.println("-"+squareRoot+" i"); 
    } 

    } 
} 
Cuestiones relacionadas