No sé si esto es un error obvio, pero al ejecutar un script Python para variar los parámetros de una simulación, me di cuenta de que faltaban los resultados con delta = 0.29 y delta = 0.58. En la investigación, me di cuenta de que el siguiente código Python:Error de redondeo de Python con números flotantes
for i_delta in range(0, 101, 1):
delta = float(i_delta)/100
(...)
filename = 'foo' + str(int(delta * 100)) + '.dat'
genera archivos idénticos para delta = 0,28 y 0,29, lo mismo con 0,57 y 0,58, siendo la razón que vuelve pitón flotador (29)/100 como ,28999999999999998 . Pero eso no es un error sistemático, no en el sentido en que le sucede a cada entero. Así que creé la siguiente secuencia de comandos de Python:
import sys
n = int(sys.argv[1])
for i in range(0, n + 1):
a = int(100 * (float(i)/100))
if i != a: print i, a
Y no puedo ver ningún patrón en los números para los que ocurre este error de redondeo. ¿Por qué sucede esto con esos números particulares?
Así es como funcionan los números flotantes IEEE 754. Te sugiero que vuelvas para convertir el flotador en un número entero, en lugar de simplemente truncar. –
No es un error, es común en muchos idiomas diferentes. Hay algunas caminatas, pero en este caso la solución más simple puede ser simplemente usar idelta en nombre de archivo. Solo tenga en cuenta que idelta no se pasa fuera del ciclo por defecto. – Tadeck
# StdSOAnswer_1. Así es como funciona el punto flotante. –