Question sur round()

Viewing 3 posts - 1 through 3 (of 3 total)
  • #72980

    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.

     

    #72995

    Cela n’a jamais attiré mon attention, après un test de mon côté:

    ou

    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..

    #73002

    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.

     

Viewing 3 posts - 1 through 3 (of 3 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login