begin process at 2010 02 10 03:59:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Borne inf/sup


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Borne inf/sup

samedi 17 novembre 2007 à 22:36:03 | Borne inf/sup

goutbouyo

Membre Club
Salut,

Je voudrais calculer la borne inférieur et la borne supérieur d'un nombre décimal.
Bien sur je veux le faire sans utiliser des fonctions comme trunc()

Si vous avez une idée, elle sera bienvenue puisque je n'ai rien trouvé sur le net.
@++++
dimanche 18 novembre 2007 à 10:38:50 | Re : Borne inf/sup

titof3812

Salut

essaie les fonctions ceil(x)  et floor(x) : plafond et plancher .

si tu veut borner a n point apres la virgule  (avant avec n negatif)

ceil( x*10^n)/10^n pour valeur sup
floor(x*10^n)/10^n) pour la valeur inf

example borne inf a 2 chiffre apres la virgule de 2,3568:

floor(2,3568*10^2)/10^2
floor(235,68)/100
235/100
2,35


j'ai pas teste mais y-a pas de raison que ca ne marche pas


dimanche 18 novembre 2007 à 10:44:27 | Re : Borne inf/sup

goutbouyo

Membre Club
Salut,
en effet ta solution est bonne mais je cherche à faire ça sans utiliser de fonctions spécifiques.
dimanche 18 novembre 2007 à 11:38:32 | Re : Borne inf/sup

titof3812

tu peut alors essayer le casting en int pour reecrir floor et ceil

essaye ca
int myfl(float val)
{
if (val<0)
    return (int)( val-1);
else
    return (int) (val);
}
int myceil(float val)
{
if (val<0)
    return (int)( val);
else
    return (int) (val+1);
   
}
main()
{
float f=2.35;
printf("val =%f  myfl=%i myceil=%i\n",f,myfl(f),myceil(f));
 f=-2.35;
printf("val =%f  myfl=%i myceil=%i\n",f,myfl(f),myceil(f));

}
compil en gcc sur un mac ca a l'air de tourner

resultat:
val =2.350000  myfl=2 myceil=3
val =-2.350000  myfl=-3 myceil=-2


dimanche 18 novembre 2007 à 12:17:15 | Re : Borne inf/sup

titof3812

Si tu veux etre plux efficace ( mais surement moins lisible) tu peux utiliser les define

example
main()
{
#define C1(x) ( (x) < (0) ? ((int)x) : ((int)(x+1)) )
#define F1(x) ( (x) < (0) ? ((int)(x-1)) : ((int)(x)) )


float f=2.35;
printf("val =%f  F1=%i C1=%i\n",f,F1(f),C1(f));

 f=-2.35;
printf("val =%f  F1=%i C1=%i\n",f,F1(f),C1(f));

 f=0;
printf("val =%f  F1=%i C1=%i\n",f,F1(f),C1(f));

}

resultat :
val =2.350000  F1=2 C1=3
val =-2.350000  F1=-3 C1=-2
val =0.000000  F1=0 C1=1

dimanche 18 novembre 2007 à 16:43:41 | Re : Borne inf/sup

titof3812

attention avec #define le parametre passe est evalue a chaque fois:
ce qui veut dire que si on appele C1 ou F1 avec f++ on incremente 2 fois la valeur f donc dans un appel define pas de calcul sur le parametre.

La meilleure solution me semble etre l'inline:
petit code d'example ( mieux qu'un long discourt)

main()
{
inline int C1(float x) { return (x) < (0) ? ((int)x) : ((int)(x+1)); }
inline int F1(float x) { return (x) < (0) ? ((int)(x-1)) : ((int)(x)); }

#define C2(x) ( (x) < (0) ? ((int)x) : ((int)(x+1)))
#define F2(x) ( (x) < (0) ? ((int)(x-1)) : ((int)(x)))

float f1=-2.35;
float f2=-2.35;
printf("val1 =%f  F1=%i C1=%i\n",f1,F1(++f1),C1(f1));   // correct 1 seul ++f
printf("val2 =%f  F2=%i C2=%i\n\n",f2,F2(++f2),C2(f2));  // bad 2 ++f


printf("val1 =%f  F1=%i C1=%i\n",f1,F1(++f1),C1(f1));
printf("val2 =%f  F2=%i C2=%i\n\n",f2,F2(++f2),C2(f2));


printf("val1 =%f  F1=%i C1=%i\n",f1,F1(++f1),C1(f1));
printf("val2 =%f  F2=%i C2=%i\n\n",f2,F2(++f2),C2(f2));


printf("val1 =%f  F1=%i C1=%i\n",f1,F1(++f1),C1(f1));
printf("val2 =%f  F2=%i C2=%i\n\n",f2,F2(++f2),C2(f2));

}

Resultat du code
val1 =-1.350000  F1=-2 C1=-1
val2 =-2.350000  F2=-1 C2=0

val1 =-0.350000  F1=-1 C1=0
val2 =-0.350000  F2=1 C2=2

val1 =0.650000  F1=0 C1=1
val2 =1.650000  F2=3 C2=4

val1 =1.650000  F1=1 C1=2
val2 =3.650000  F2=5 C2=6

voila vaoila 
mercredi 5 décembre 2007 à 18:56:38 | Re : Borne inf/sup

nickydaquick

Membre Club

Salut,
une autre solution vite fait;

double x  = (valeur choisie);
int borneInf= (int)x - !!((int)x&80000000);
int borneSup = borneInf+1;

J'espere avoir aide, Salut
je suis heureux de faire partie d'une grande famille ...!


Cette discussion est classée dans : borne, inf, sup


Répondre à ce message

Sujets en rapport avec ce message

cacher une programme console au ctrl alt sup [ par petitchech ] j'aimerai savoir comment cacher un programme au ctrl alt sup. Comparaison avec StrCmp() [ par lcampeur ] Bonjour, je souhaite effectuer une comparaison, j'ai un programme contenant une structure borne contenant: 1- char NomBorne [20] 2- char IP[16]M Supprimer/modifier une borne [ par lcampeur ] Bonjour, je suis toujours sur le mm prgm, celui qui consiste à géré des bornes en réseau. Je dois supprimer des bornes précedemment écrite. Elles se s comparer un caractere et un entier [ par sozer2 ] Bonjour j'ai 2 variablechar sup;int nb_produits; for(i=0; iEn fait ce que je veux, c que lors d'une saisie si on choisi un chiffre il n'y ai pas de pr Texte GLUt scintillant et problème de compilation [ par themioux ] Salut à tousDe plus en plus fan d'arcade, j'ai fais aquisition d'une borne que j'ai transformé en mamecab (en gros j'ai mis un ordinateur dans la born Nombre Secret `(Probleme de Proba...) [ par albert0 ] Bonsoir, Voila, je suis en train de faire un algorithme, le but est est de trouve un "Nombre secret" ce nombre secret est generé par un Random: Floa Remplir un tableau avec des valeurs aléatoires(pour mastermind) [ par rammstein596 ] Bonsoir!!Je dois faire un mastermind en C avec Dev-C++ en cours,mais je suis bloqué a une étape,c'est pour remplir un tableau avec des valeurs aléatoi Problem with streams and 1.#INF [ par infodaoudi ] bonjour,j'ai une fonction qui fait un certain calcul et qui affiche le resultat dans un fichier txt, le resultat est sous forme double, je me trouve a pb pour écrire dans un fichier [ par mailliam ] Bonjour tout l'monde..Moi je débute, j'ai un projet assez simple, qui me semblait en tout k jusqu'a maintnt..je veux faire un programme qui change l'i langage C [ par wafa_mef ] merci de me considerer un membre de ce club et j' ai le plaisir de participer avec vous .merci pour les codes sources envoyés. j'ai écrit un programme


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales