Pérdida de precisión con números muy pequeños en matrices de Python

Tengo dos matrices en tipo float64 y cuando asigno el valor del primero al segundo, redondea el valor. El siguiente código simple ilustra el problema y excluye la posibilidad de una mera representación de números. (He esquematizado un fragmento de mi código para que sea más legible, pero en esencia es lo mismo)

X = zeros((2,2)) Y = zeros((2,2)) Z = X #a shorter way of making a new matrix, equal to X... X[0,0] = Y[0,0] Z[0,0]=0 print Y[0,0] print X[0,0] print type(Y[0,0]) print type(X[0,0]) if X[0,0]==Y[0,0]: print'they are equal' else: print'they are NOT equal' 

Corrí este pequeño fragmento de código para todos los coeficientes y todas las salidas son similares a esto:

 1.90897e-14 0   they are NOT equal 

Me parece que la matriz X es de otro tipo, pero se crea de la misma manera, con la función ceros () con el tipo estándar (float64)

Editar: Los arreglos se inicializan con

 X = zeros((2,2), dtype=float64) Y = zeros((2,2), dtype=float64) 

También se incluye una impresión útil adicional en el ejemplo anterior.

Editar: añadí las líneas problemáticas, después de que encontré el problema

¿Estás absolutamente seguro de que X es una matriz float64? Si lo fuera, esperaría que X [0,0] fuera 0.0, pero en su lugar se ve 0, lo que me parece un número entero ..

 >>> Xf = arange(10,dtype=float64) >>> Xi = arange(10) >>> Xf[0] 0.0 >>> Xi[0] 0 >>> Yf = Xf*0.0 >>> Yf[0] 0.0 >>> >>> Yf[0] = 1.90897e-14 >>> Yf[0] 1.9089700000000001e-14 >>> Xf[0] = Yf[0] >>> Xf[0] 1.9089700000000001e-14 >>> Xi[0] = Yf[0] >>> Xi[0] 0