GOOGLE ADS

miércoles, 20 de abril de 2022

Estoy tratando de aproximar la raíz cuadrada de 2 en python

aquí está el código que escribí. mi idea es poner un número (entre 0~9) al final de x y elevarlo al cuadrado y luego ver si es menor que 2, eligiendo el mayor

x = 1.4
for n in range(21):
next_num = [0,1,2,3,4,5,6,7,8,9]
candidate = []
for number in next_num:
if float(str(x)+str(number))*float(str(x)+str(number))<2:
candidate.append(number)

x = float(str(x)+str(max(candidate)))

print(x)

pero el problema es que solo obtengo 1.414213562373 esta cantidad de 13 dígitos. Traté de escribir un número más grande en el rango, pero solo obtengo esto.

gracias


Solución del problema

floats no tiene suficiente precisión para esto. Necesitas el decimalmódulo:

from decimal import Decimal, getcontext
getcontext().prec = 51 # the "1" before the decimal point counts, too
x = Decimal("1.4")
for n in range(50):
next_num = [0,1,2,3,4,5,6,7,8,9]
candidate = 0
for number in next_num:
if Decimal(str(x)+str(number))*Decimal(str(x)+str(number))<2:
candidate = number
x = Decimal(str(x)+str(candidate))
print(x)

Producción:

1.414213562373095048801688724209698078569671875376946

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...