Bonjour,
Je vois des choses bizarres avec la fonction round() (sur un vecteur) lorsque la valeur à arrondir est xxx.5 (pile au milieu).
Je fais:
v1=… some data…
v4=…some data…
v2 = round(1000 * (exp(1/v1)))
v3=exp(v4/v4[v2/2])
A un moment j’ai: v1[i]=2.479 => v2[i]=1497 et je trouve que v3[i] a été calculé avec v2/2=748 (i.e. arrondi vers le haut)
Mais à l’indice suivant j’ai: v1[i+1]=2.4559 => v2[i+1]=1503 et je trouve que v3[i+1] a été calculé avec v2/2=752 (i.e. arrondi vers le bas)
Autrement dit, il semble que
[1497/2] renvoie le 748ème élément, j’anticipe donc que round(1497/2)=round(748.5)=748
[1503/2] renvoie le 752ème élément, j’anticipe donc que round(1503/2)=round(751.5)=752
Avez-vous constaté de tels problèmes d’arrondis (parfois arrondi vers le haut, parfois vers le bas) lorsque la valeur à arrondir est pile xxx.5 ?
Merci par avance pour vos lumières.
Cela n’a jamais attiré mon attention, après un test de mon côté:
return round(1497/2), round(1503/2)
ou
return round(748.5), round(751.5)
me tourne bien l’arrondi à l’entier supérieur, soit respectivement 749 et 752, voudrais-tu essayer ces 2 différentes lignes de RETURN de ton côté ?
Il est possible que ce phénomène ne provienne que de ce genre de ligne: round(1000 * (exp(1/v1)))
à suivre..
J’ai finalement trouvé que sur mon cas d’usage (très) particulier, l’arrondi est fait “à la Numpy”, c’est à dire que pour les xxx.5 c’est arrondi à l’entier *pair* le plus proche. Je ne sais pas pourquoi c’est différent que dans un round() tout simple.