python for-loop segmentation-fault series pi

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.