division avec arrondi au nombre supérieur normal ou pas ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

division avec arrondi au nombre supérieur normal ou pas ?

Message par comtois »

Je fais ça

Code : Tout sélectionner

mx.f = 64
mx1 = 120/mx
Debug mx1
Et comme mx1 est un long , je m'attendais à ce qu'il prenne la valeur 1 , or il prend la valeur 2 . Si je mets mx.l , là c'est ok , ça marche comme attendu . Bon pourquoi pas ,il suffit de le savoir , mais j'étais étonné , et surtout j'ai cherché un moment pourquoi j'avais des erreurs :)

Est-ce que ça vous semble normal ce résultat ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

120/64=1.875

2= arrondi

car au dessus de 1.500 c'est egale a 2
et en dessous c'est egale a 1
c'est le principe de l'arrondi ça !! :?
moi je trouve ça normal !! (et mem pratique !! pour la compta !! ) :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Ben ça se défend :)

Jétais persuadé qu'en prenant un entier , je n'aurais que la partie entière en résultat. Bon , pas grave , il suffit de le savoir .

Maintenant je fais comme ça :)

Code : Tout sélectionner

mx.f = 64 
mx1 = Int(120/mx) 
Debug mx1
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'allais le dire int() sert à ça !! :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Dobro a écrit :120/64=1.875

2= arrondi

car au dessus de 1.500 c'est egale a 2
et en dessous c'est egale a 1
c'est le principe de l'arrondi ça !! :?
moi je trouve ça normal !! (et mem pratique !! pour la compta !! ) :)
un arrondi "au dessus" c'est à partir de 1.5 et pas au delà ;)
Sinon je pense qu'une division d'entier devrait etre entiere... Et pas arrondie... Mais comme dis comtois l'essentiel c'est de le savoir... Et je crois que ca m'a fait comprendre pourquoi un de mes portages DB vers PB ne fonctionne pas du tout...

Dri
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Code : Tout sélectionner

mx.f = 64 
mx1 = 120/mx 
Debug mx1

nx.l = 64
nx1 = 120/nx
Debug nx1
donne

2
1

dans le debugger ce qui correspond bien à un comportement cohérent :

- si la division est basée sur des entiers en totalité le calcul se fait en entiers et donc le résultat est bien équivalent à Int().

- si la division contient un ou plusieurs flottants, le calcul est réalisé en flottant et le résultat est arrondi à la valeur entière la plus proche avant d'être affecté à la variable.

Le code généré en ASM montre bien ce comportement.

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre