Encuentre 10,000 dígitos después del punto decimal del número raíz 2, pensamientos aleatorios sobre preguntas de entrevistas de bytes

origen

Ayer en el grupo, un pequeño compañero envió una pregunta de entrevista sobre el backend de bytes, la raíz de la pregunta es pedir 2 \sqrt{2}2 10,000 dígitos después del punto decimal. Después de pensar intuitivamente y buscar información en Internet, hay aproximadamente tres soluciones de la siguiente manera. Dado que la precisión decimal en muchos idiomas no puede alcanzar el nivel de 10 (-10000), simplifiquemos esta pregunta a 6 dígitos después del punto decimal .

Método 1, dicotomía intuitiva

Suponiendo que el número dado es n , puede establecer el límite izquierdo en 0 y el límite derecho en n, y tomar mid = (0 + n) / 2. Si mid 2 es menor que n, establezca el límite izquierdo en mid, de lo contrario, el límite es mid.La condición para terminar el ciclo es que la diferencia entre los límites izquierdo y derecho sea menor que el umbral de precisión (right - left <threshold), el código simple es el siguiente :

double getSqrt(int n, double threshold)
	double left = 0, right = n;
	while ( right - left > threshold){
    
    
		double mid = (left + right) / 2;
		if (mid * mid == n) return mid;
		else if (mid * mid < n) left = mid;
		else right = mid; 
	} 
	return left;

La lógica es relativamente simple, así que no haré demasiados comentarios.

Método 2, método de iteración de Newton

El método iterativo de Newton teóricamente puede encontrar las raíces de la mayoría de los polinomios (el requisito mínimo es que la función sea derivable en segundo orden, que no es el alcance de este artículo, por lo que se omite), la idea general es la siguiente: dada la ecuación de la curva f(x), se requiere que la raíz de la ecuación
sea xn x_nXnHaz una tangente en el lugar, encuentra xn + 1 x_{n+1}Xn + 1, donde xn x_nXnEs una solución determinada en el proceso iterativo. La solución inicial se puede establecer arbitrariamente, pero es mejor ser lo más preciso posible. Es fácil obtener xn x_n
por derivación .XnLa ecuación de la recta tangente es fff (xn x_nXn) + f ′ f 'F (xn x_nXn)( xxx -xn x_nXn),
la simplificación se puede calcular como xn + 1 = xn − f ( xn ) f ′ ( xn ) {x_{n+1} = x_n - \frac {f(x_n)} {f'(x_n)}}Xn + 1=XnF (Xn)f ( xn)
Luego puede iterar este proceso continuamente, y la condición de terminación es xn − xn + 1 < umbral {x_n} - {x_{n+1}} < umbralXnXn + 1<t h r e s h o l dPara esta
pregunta,f ( x ) = x 2 − nf(x) = x^2 - nf ( x )=X2n , la correspondientef ′ ( x ) = 2 x f'(x) = 2xF (x)=2 x , por lo que el código es el siguiente

double getSqrtNt(double n, double threshold){
	doulbe x_n1 = n / 2;  //起始点设置, 这是我随便写的一个, 可以有更好的方法
	double x_n = n;
	while (abs(x_n1 - x_n) > threshold){
		x_n = x_n1;
		x_n1 = xn - (xn * xn - n)/(2 * xn)
	}
	return xn;
}

Método 3, método de fracción continua, adecuado para cálculo manual

De hecho, este método es esencialmente el mismo que el método de iteración de Newton. Este método se puede aplicar a estudiantes que no son muy competentes en derivadas, y las condiciones de este método son relativamente duras. Hay dos puntos

  1. raíz cuadrada solamente
  2. El radicando es un entero positivo.
    Los pasos son los siguientes, requiriendo s \sqrt{s}s , primero descompóngalo en s = a 2 + bs = a^2 + bs=a2+b , dondea 2 >> ba^2 >> ba2>>b , luego de acuerdo con la precisión requerida
    s = a + b 2 a + b 2 a + . . . \sqrt{s} = a + \frac {b} {2a + \frac {b} {2a + ...}}s =a+2a + _2 a + . . .segundosegundo
    Por ejemplo, para encontrar la raíz cuadrada de 150, primero encuentra 150 = 12 ∗ 12 + 6 150 = 12 * 12 + 61 5 0=1 21 2+6
  • Encuentra la situación de primer orden, 150 = 12 \sqrt{150} = 121 5 0 =1 2
  • Para el segundo orden, 150 = 12 + 6 / 24 = 12,25 \sqrt{150} = 12 + 6/24 = 12,251 5 0 =1 2+6 / 2 4=1 2 . 2 5 , la precisión es mayor ahora
  • Tercer orden, 150 = 12 + 6 / ( 24 + ( 6 / 24 ) ) = 12,2474 \sqrt{150} = 12 + 6/(24 + (6/24)) = 12,24741 5 0 =1 2+6 / ( 2 4+( 6 / 2 4 ) )=1 2 . 2 4 7 4 , un poco más alto
  • …cuanto mayor sea la precisión, mayor será la precisión Consultar los 150 \sqrt{150}
    de la calculadora1 5 0 El valor de es 12.24744, que está muy cerca de nuestra respuesta.
    El método de prueba también es muy simple. Publicaré la prueba relevante del Sr. Li Yongle más adelante.

Referencias

[1] ¿Cómo explicar el método iterativo de Newton para encontrar la raíz cuadrada de una manera fácil de entender? ¿Análisis numérico? - Respuesta del estudiante Ma - Zhihu
[2] ¿Cómo calcular la raíz cuadrada a mano? ¡Después de aprender esto, puedes presumir ante tus amigos nuevamente!

Supongo que te gusta

Origin blog.csdn.net/Mint2yx4/article/details/118873223
Recomendado
Clasificación