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
float
s no tiene suficiente precisión para esto. Necesitas el decimal
mó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