J'ai besoin de savoir quelles sont les formules mathématiques - s'il y en
a mais je suppose que oui - pour les cas suivants (dans le cadre d'un
laboratoire informatique) de fonctions qui :
- retourne la valeur arrondie du quotient
- retourne le plus petit entier supérieur ou égal au quotient
- retourne le plus petit entier inférieur ou égal au quotient
Merci infiniment d'avance !
Julien
Posted by: Olivier Miakinen
Le 18/11/2003 18:50, Julien Mariller a écrit :
> Bonjour,
>
> J'ai besoin de savoir quelles sont les formules mathématiques - s'il y en
> a mais je suppose que oui - pour les cas suivants (dans le cadre d'un
> laboratoire informatique) de fonctions qui :
>
> - retourne la valeur arrondie du quotient
> - retourne le plus petit entier supérieur ou égal au quotient
> - retourne le plus petit entier inférieur ou égal au quotient
^^^^^
le plus grand, je suppose.
Tu disposes de quoi, comme fonctions ? Si tu n'as que les quatre
opérations, alors c'est difficile à faire, je pense.
Sinon, mettons que tu aies la partie entière par valeur inférieure,
appelons-la floor(x).
Alors la valeur arrondie est :
round(x) = floor(x+0,5)
Et la partie entière par valeur supérieure est :
ceil(x) = -floor(-x)
Posted by: albert junior
Am 18/11/03 19:05, sagte Olivier Miakinen (Olivier.Miakinen@evidian.com) :
> Tu disposes de quoi, comme fonctions ? Si tu n'as que les quatre
> opérations, alors c'est difficile à faire, je pense.
>
> Sinon, mettons que tu aies la partie entière par valeur inférieure,
> appelons-la floor(x).
>
> Alors la valeur arrondie est :
> round(x) = floor(x+0,5)
hein ? pourquoi ce 0,5 ?
moi j'aurais dit : valeur approché à n décimales de A :
par défaut = floor(A*10^n)/10^n
par excès = [floor(A*10^n)+1]/10^n
> Et la partie entière par valeur supérieure est :
> ceil(x) = -floor(-x)
= floor (x) + 1
par valeur inférieure floor(x)
albert
--
Bitte abnehmen die drei Sterne (***), um Albert Einstein (Junior) zu
antworten
Posted by: Olivier Miakinen
Le 18/11/2003 19:22, albert junior a écrit :
>
>> Alors la valeur arrondie est :
>> round(x) = floor(x+0,5)
>
> hein ? pourquoi ce 0,5 ?
J'ai supposé que la question était « arrondie à l'entier le plus
proche », et répondu en conséquence.
>> Et la partie entière par valeur supérieure est :
>> ceil(x) = -floor(-x)
> = floor (x) + 1
Ça ne marche pas pour les entiers.
ceil(3) = 3
floor(3)+1 = 4
Posted by: albert junior
Am 18/11/03 19:37, sagte Olivier Miakinen (Olivier.Miakinen@evidian.com) :
>> hein ? pourquoi ce 0,5 ?
>
> J'ai supposé que la question était « arrondie à l'entier le plus
> proche », et répondu en conséquence.
>
ok, je viens de comprendre
j'avais mal réflechi, désolé
albert
--
Bitte abnehmen die drei Sterne (***), um Albert Einstein (Junior) zu
antworten
Posted by: Julien Mariller
Le problème c'est que "aucun calcul intermédiaire ne devra être effectué en
virgule flottante" !!!
"albert junior" <alberteinstein588***@hotmail.com> a écrit dans le message
de news:BBE02F1D.1B225%alberteinstein588***@hotmail.c om...
> Am 18/11/03 19:37, sagte Olivier Miakinen (Olivier.Miakinen@evidian.com)
:
>
>
> >> hein ? pourquoi ce 0,5 ?
> >
> > J'ai supposé que la question était « arrondie à l'entier le plus
> > proche », et répondu en conséquence.
> >
> ok, je viens de comprendre
> j'avais mal réflechi, désolé
>
>
>
> albert
>
> --
>
> Bitte abnehmen die drei Sterne (***), um Albert Einstein (Junior) zu
> antworten
>
Posted by: Olivier Miakinen
Le 18/11/2003 21:13, Julien Mariller a écrit :
> Le problème c'est que "aucun calcul intermédiaire ne devra être effectué en
> virgule flottante" !!!
Donc ta division retourne un entier, je suppose.
Je suppose aussi que c'est l'entier le plus proche par valeur
inférieure, floor(p/q). Est-ce exact ?
Pour en être sûr, donne-nous le résultat des divisions suivantes :
10/3
11/3
(-10)/3
(-11)/3
10/(-3)
11/(-3)
(-10)/(-3)
(-11)/(-3)
Je crois que la réponse pour l'arrondi sera :
round(p/q) = floor((2p+q)/(2q)).
> Le 18/11/2003 21:13, Julien Mariller a écrit :
>
>> Le problème c'est que "aucun calcul intermédiaire ne devra être effectué en
>> virgule flottante" !!!
>
> Donc ta division retourne un entier, je suppose.
>
> Je suppose aussi que c'est l'entier le plus proche par valeur
> inférieure, floor(p/q). Est-ce exact ?
Je viens de vérifier avec mon compilateur C (gcc), eh bien le résultat
est en fait l'entier le plus proche "dans la direction du 0",
c'est-à-dire que c'est par valeurs inférieures pour les nombres
positifs, mais par valeurs supérieures pour les négatifs.
> 10/3
> 11/3
> (-10)/(-3)
> (-11)/(-3)
Ces quatre-ci donnent 3
> (-10)/3
> (-11)/3
> 10/(-3)
> 11/(-3)
Ces quatre-là donnent -3 (et pas -4)
> Je crois que la réponse pour l'arrondi sera :
> round(p/q) = floor((2p+q)/(2q)).
Cette formule marche donc pour les nombres positifs. Si tu as besoin de
nombres négatifs aussi, précise-le.
On a même, si p >= 0 et q > 0,
- floor(p/q) ::= p/q
- round(p/q) ::= (2*p+q)/(2*q)
- ceil(p/q) ::= (p+q-1)/q