falla de segmentación en el cálculo pi(python)
for-loop segmentation-fault (2)
¿Por qué usar eval()
en absoluto?
def pi(times):
val = 1
counter = 0
for x in range(times) :
counter += 2
val *= float(counter)**2/(counter**2 - 1)
return val * 2
Hace exactamente lo mismo.
def pi(times):
seq = []
counter = 0
for x in range(times):
counter += 2
seq.append("((%f**2)/(%f*%f))*"%(float(counter), float(counter-1), float(counter+1)))
seq.append("1.0")
seq = "".join(seq)
seq = eval(seq)
return seq*2
En cualquier lugar después de los 85000 términos, recibo una falla de segmentación y Python se cierra. ¿Cómo puedo evitar esto? ¿Por qué se está cayendo? ¿No puede simplemente usar más memoria o algo?
Parece que has encontrado un error en eval
donde no puede manejar expresiones terriblemente largas:
>>> eval("1.0*"*10000+"1.0")
1.0
>>> eval("1.0*"*100000+"1.0")
# segfault here
Sin embargo, uso la frase "increíblemente largo". No lo hagas de esa manera, calcula las piezas sobre la marcha. No hay ninguna razón para usar eval
en esta situación.