Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#21 Message par Claudius » mar. 15 déc. 2015 11:30

Bonjour,
Jérémy a écrit:
Je comprends les calculs, mais pas l’intérêt en fait ? sauf de calculer plus vite, mais comme c'est le µC qui fait les calculs on s'en fou non ?
...

- L'utilisation de nombres flottants permet uniquement de ne pas perdre en précision mais au coût d'un travail non négligeable pour le µC qui dans la plupart des cas n'est pas fait pour cela...

- L'idée de maï et de paulfjujo est de proposer un juste milieu entre précision et performances requises par rapport au µC qui fait ... le boulot quitte à baisser les bras (enfin les pins ;-)) et à partir en vrac. Donc, on ne peut [et ne doit] pas s'en foutre comme tu dis car il faut se mettre à sa place et ne pas se plaindre des effets de bords imprévisibles.

- L'affichage quel qu'il soit et destiné à un homme (LCD, sortie écran, IHM, etc.) d'un résultat physique ne peut et ne doit pas être issu directement de la valeur flottante et doit donc toujours passer par une conversion en une valeur exprimée par un nombre en arithmétique fixe.

=> Je cite: "Les nombres en virgule fixe sont utiles pour représenter des quantités fractionnaires dans un format utilisant le complément à deux quand le processeur de l'ordinateur n'a aucune unité de calcul en virgule flottante ou quand une virgule fixe permet d'augmenter la vitesse d'exécution ou d'améliorer l'exactitude des calculs."

Maintenant, cela n'est pas si compliqué que cela voire même simple dixit maï, c'est somme toute du bon sens et un réflexe qui viendra avec l'expérience et un travail sur entre autre: le codage des nombres flottants dans un ordinateur, le système binaire, etc. choses qui ne datent pas d'hier et qui semblent ne plus être apprises à l'école ou à l'université ;-).

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#22 Message par Jérémy » mar. 15 déc. 2015 11:51

Ok , je comprends effectivement , et je ne permettrait pas de vous contredire, que cela prends du temps.

Chose que je ne me rends pas compte, car en effet, je ne fais qu'une mesure sans rien faire d'autre. Je ne suis pas en capacité pour décompiler mon programme et regarder le temps que ça me prends ...... :oops:

Ça à l'air vachement plus compliqué que ça en à l'air, quand on veut en tant soit peut être peaufin !

Pour le dire avec mes mots : en gros on travaille sur des entiers, on fait nos conversions, puis à la fin on place une virgule fictivement( sur l'ecran) pour croire à un flottant par exemple?

Genre : j'ai 2.50V en entrée. Avec une optimisation mon CAN me renvoie 250 comme valeur. et moi j'affiche 250 mais avec un point après le "2" . donc 2.50 c'est ça ?

En disant " je m'en fou", j’entendais par la , on s'en moque car c'est son travail de faire les calculs, mais pas je m'en fou de ce qui se passe s'il met beaucoup de temps a les faires. en l’occurrence mon problème c'est le manque d’expérience, du temps de traitement sur un flottant. mais vous m'avez fait prendre conscience du danger car ce traitement est long !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#23 Message par Guest » mar. 15 déc. 2015 12:05

oui c'est cela par contre refait les calcul pour 2.13v
allez je les refait pour toi 2.13:2 (pont diviseur)/ 0.005 pas de quantification nous donne bien 213 dans CAN exactement 0XD5 que tu passes par une conversion HEXA ->ASCII avec pose du point ou virgule

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#24 Message par Jérémy » mar. 15 déc. 2015 12:14

oui c'est cela par contre refait les calcul pour 2.13v

Oui je l'avais fait sans prendre en compte le pont diviseur.
je vais préciser ceci dans le tuto, car ca peut etre dangereux de travailler avec des flottants, comme cela prends beaucoup de ressources .

Merci à vous pour vos remarques très judicieuses !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#25 Message par Guest » jeu. 17 déc. 2015 09:43

Claudius a écrit :Bonjour,
est de proposer un juste milieu entre précision et performances requises

Je résumerais ton long discours ;) par , être tout simple dans la vrai vie.
Mesurer la distance Paris Marseille au micro prés, quel sens dans notre petite tête représente cette valeur? et de plus avec quel outil
Donc adapter les valeurs que l'on veut mesurer a notre environnement:
Un exemple que fait très bien nos appareils de mesures, un multimètre adapte les décimales en fonction du calibre, mesurer une résistance de plusieurs méga ohm au centième prés pourquoi même question que représente cette valeur pour nous ?

Une autre réflexion que l'on doit se poser amha, pourquoi faire un petit calcul sur 6 décimales voir plus pour en faite en garder que 2

De plus les µC ne sont pas fait pour cela. ATMEL lors d'une news c'est posé déjà la question, µC ou µP

A+

Comment arrondir un Float , 2 chiffres aprés la virgule ?
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#26 Message par sylvain54 » jeu. 14 janv. 2016 17:43

Bon j'arrive en retard,

je fais comme ça pour afficher mes valeurs sur le LCD ou sur l'uart :

Code : Tout sélectionner

//Variables
char txt1[] = "Alimentation";
int ADC_Value_0 0;           //Variable pour le nombre de pas du CAN AN0
unsigned int DisplayVolt_0;    //Variable en int pour la tension AN1
char *tension_0 "00.00";     //variable pour afficher la tension AN0 sur le LCD


//Fonctions et prototypes

void AN0_Read() {
 
ADC_Value_0 ADC_Read(0);

 
DisplayVolt_0 ADC_Value_0*0.4887;
 
tension_0[0] = DisplayVolt_0/1000 48;
 
tension_0[1] = (DisplayVolt_0/100)%10 48;
 
tension_0[3] = (DisplayVolt_0/10)%10 48;
 
tension_0[4] = DisplayVolt_0%10 48;
 
Lcd_Out(1,1,tension_0);
 
Lcd_Out(1,7,"V");
 } 


Je trouve aussi la méthode de paulfjujo très élégante. ;)

++

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#27 Message par Guest » jeu. 14 janv. 2016 19:12

sylvain54 a écrit :Bon j'arrive en retard,

je fais comme ça pour afficher mes valeurs sur le LCD ou sur l'uart :

je dirais que tu repasses regarde en #7 ;) et ne résout en rien l'utilisation des flottants.de plus pourquoi la recherche du 3 eme chiffre a prés la virgule tu affiches quoi comme tension? au millième, même mon multimètre digital ne le fais pas en bas d’échelle .

Il y a aussi dans ton code un petit problème comment tu fais pour passer du flottant au decimale ?

Comment arrondir un Float , 2 chiffres aprés la virgule ?
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#28 Message par sylvain54 » ven. 15 janv. 2016 08:42

La question n'était pas comment afficher 2 chiffres derrière la virgule ? Jeremy n'a pas dit qu'il voulait s'affranchir des float.
Ce bout de code est tiré des exemples fournis avec le compilateur pour les Pic24 et les Dspic de chez Mikroe.
j'obtiens un nombre sous la forme xxxx, il ne reste plus qu'à placer les chiffres au bon endroit. Je ne vois pas où est le problème dans mon code :?:

++

Comment arrondir un Float , 2 chiffres aprés la virgule ?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#29 Message par Guest » ven. 15 janv. 2016 09:33

bonjour

Dis moi si je me trompe mais:
DisplayVolt_0 est bien un flottant par quelle opération tu passes d'un flottant a un NB hexa (integer)?

Ton compilateur ne te dis rien, le mien il dis cela:

compli.png


Quand a l'utilisation des flottants, tient petit question tu as déjà décompile un bout de code du style float=32600,98765432 ?
moi oui regarde en ASM ce que ca donne viewtopic.php?f=11&t=162, car si tu veux de la rapidité il va falloir oublier les flottants et ce que je proposais c'est une notre façon de faire des chiffres a virgules avec CAN bien sur sans flottant(un notre algo)

Les µC ne sont pas fait pour faire du float il y a les µP qui font cela tres bien, car ils ont un coprocesseur mathématique depuis les années 1990 incorporé.Mais tu peux toujours faire du flottant cela a un coup en ressource et occupation mémoire a toi de voir....

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Comment arrondir un Float , 2 chiffres aprés la virgule ?
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#30 Message par sylvain54 » ven. 15 janv. 2016 10:19

Non mon compilateur ne me dit rien, aucune erreur.
Pour les float, effectivement quand il y a trop de chiffres derrière la virgule ça rame, testé sur un pic 24.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 43 invités