On Fri, 2 Mar 2012 19:28:36 +0100 - François Bianco <[email protected]> wrote:
> Je me répond à moi même : oui c'est la représentation des nombres en > float32 qui pose problème : > > x = [1.01, 2.1, 0.03, 0.04, 0.05] > y = array(x, dtype=float32) > print(y) > > array([ 1.00999999, 2.0999999 , 0.03 , 0.04 , 0.05 > ], dtype=float32) Effectivement... values = values.astype(numpy.float64) / mult values = values.round(decimals = self.multiplier) --> [ -6.01 18.1 6. ..., -5. 15. 16. ] Fonctionne en effet tres bien. Si je rajoute, apres l'arrondi, la ligne : values = values.astype(numpy.float32) --> [ -6.01000023 18.10000038 6. ..., -5. 15. -15.] Le comportement non desire resurgit. Je me serai attendu a ce que round(), me permette d'eliminer ces 'digits' a droite. Ce d'autant qu'il ne semble pas s'agir du fameux probleme d'arrondi classique du probleme '0.1', puisque je n'ai pas de '099999...'. Mais ce 2.7e-7 est surprenant dans le sens ou il est a la frange de ce que float32 peut manipuler, represent plus qu'un simple 'bit' errant suite a une operation a la limite de l'over/under-flow et ne semble pas pouvoir etre eliminer par round()... Il semblerait que Python 3.* traite les problemes d'arrondis de maniere differente, mais je n'ai pas de version de Numpy qui aille avec mon Python 3.2... Bref... ca m'ennuie de manipuler des donnees en 64 bits (pour des questions de memoire) alors que je n'ai absolument pas besoin de cette precision :-( Merci a tous pour vos infos et idees. dc _______________________________________________ gull mailing list [email protected] http://forum.linux-gull.ch/mailman/listinfo/gull
