10Fermer12
veryLe 07/07/2008 à 04:06
skimman974 (./8) :
tu savais toi que round(.5(A-B)+B,0) n'est pas du tout forcément égal à round(.5(A-B),0)+B ???


Ben c'est évident..
Round arrondi au sens mathématique à la décimale voulu: en gros si il reste qqch <0.5 (le 0 représentant là où on arrondi, prendre round(X,0) pour que ça corresponde directement ) ça passe à 0, ie on tronque ou arrondi par 'en dessous' et sinon ( >= 0.5 ) ça passe à '10', ie on arrondi par dessus.

Bref imagine que B ne soit pas entier, genre B=0.5. Prenons A=2.5. alors round(0.5(A-B),0) + B = round(1,O)+0.5 = 1.5.
Au contraire round(0.5(A-B)+B,0) = round(1.5,O) = 2.
Tu peux te dire que si B n'est pas entier le résultat de droite ne sera pas entier alors que celui de gauche le sera par exemple.
Baruch (./9) :
Haha ben au moins tu ne feras plus l'erreur. Pour toutes les fonctions de ce genre (int, round, iPart, fPart), il me semble que f(A+B) = f(A)+f(B) si B est un entier. Quoique il faudrait y réflèchir (ce qui n'est pas le moment après avoir été déclaré bachelier ^^).

Ben le mieux c'est de savoir ce que font mathématiquement ces fonctions...
.int renvoie le premier entier relatif inférieur ou égal. (int(42.9) = 42, int(-5.1) = -6 )
On a bien int(A+B) = int(A) + B si B entier relatif (pasque ça fondamentalement ça agit juste sur la partie décimale, ie int(42.9) = 42 + int(0.9) )

.round arrondi au sens mathématique à la décimale voulu.(comme décrit avant). Si B n'est pas de décimale au délà (ie si on arrondi par exemple à trois avec round(A+B,3) et que B n'a que 2 décimale non-nulle, ie genre 42.24000 ) on peut le sortir..

.iPart renvoie le premier entier relatif plus petit ou égal au sens de valeur absolu: en clair a renvoie exactement ce qu'on voit avant la virgule. La différence avec int, c'est pour les nombres négatif ( iPart(-5.2) = -5 alors que int(-5.2) = -6 )
De même on peut sortir le B s'il est entier...

.fpart renvoie ce qu'il y a derrière la virgule (au sens le plus visuel). On ne peut évidemment pas sortir le B s'il est entier, par contre on peut le sortir si sa partie entière est nulle:
fPart(42 + 0.627) = 0.627. et fPart(0.627)+42 = 42.627 ..
fpart(12.25 + 0.5 ) = 0.75 = 0.5 + fpart(12.25)



Morale de l'histoire: quand vous utiliser une fonction mathématique, essayer d'avoir une idée précise de ce qu'elle fait, sinon vous finirez toujours par avoir des surprises ..