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

Probleme effet de bords avec Float2Ascii
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1485
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » lun. 21 janv. 2019 19:33

bonsoir,

je viens de subire une nouvelle galère , avec un tout petit programme
qui part en sucette en fin d'execution ... cherche ... :mur:

Code : Tout sélectionner


avec 
#define Rad  0.01745329
unsigned char CRam1[40];
float df1,df2;

....

for (i=0;i<90;i++)
   {
   df1=(float)i  ;
   df1=df1 * Rad; // PI /180.0;
   df2=cos(df1);
   UART1_Write_CText("Cos ");
   WordToStr(i, CRam1);
   UART1_Write_Text(CRam1);
   UART1_Write(TAB);
  // FloatToStr(df2, CRam1);    // <--- OK 
   Float2Ascii (df2,CRam1,5);   // BAD avec cette version si  precision=6 ou 2  ou 3 
   UART1_Write_Text(CRam1);
   CRLF();
   }



le resultat est OK, avec 6 digits derriere la virgule, mais le programme
repart à zero.. = RESET = Plantage en boucle
oops
Test calcul cosinus Angle
Cos 0 1.00000
Cos 1 0.99985
Cos 2 0.99939
Cos 3 0.99863
Cos 4 0.99756
Cos 5 0.99619
Cos 6 0.99452
Cos 7 0.99255
Cos 8 0.99027
Cos 9 0.98769
Cos 10 0.98481
....

la version mikroC ( FloatToStr) ne plante pas,
mais donne ... BEURK ! :sad:
Cos 0 1
Cos 1 9.998476e-1
Cos 2 9.993908e-1
Cos 3 9.986295e-1
Cos 4 9.975639e-1
Cos 5 9.961945e-1
Cos 6 9.945218e-1
Cos 7 9.925459e-1
Cos 8 9.902679e-1
Cos 9 9.876883e-1
Cos 10 9.848076e-1


en limitant la precision à 4 digits .. c'est OK
mais BAD avec 2 ou 3 , OK avec 4
???? :!!: :mur:
Là , je suis SEC .. le programme Tombe en MARCHE ..
mais ça J'achete pas .

Ce qui est bizarre , c'est que je n'avais pas encore vu ce cas de figure,
alors que j'utilise à foison ce sous programme
d'ailleurs avec les calcul de longitude et lattitude (Jeremy )


Code : Tout sélectionner


void Float2Ascii 
(float x, unsigned char *str,char precision)
{
 // converts a floating point number to an ascii string
 // version limitée à 5 decimales maximum  le 21-01-2019
 // old version limitée à 6 decimales maximum
 // x is stored into str, which should be at least 30 chars long
 int ie, i, k, ndig;
 double y;
 if (precision>=6) precision=6;  else precision++;
 ndig =   precision;
 ie = 0;
 // if x negative, write minus and reverse
 if ( x < 0.00000)
 {
   *str++ = '-';
   x = -x;
 }
 // put x in range 1 <= x < 10
 if (> 0.000000) while (< 1.000000)
 {
   x *= 10.000;                // a la place de =*
   ie--;
 }
 while (>= 10.0000)
 {
   x = x/10.0000;
   ie++;
 }
 // in f format, number of digits is related to size
 ndig += ie;                                // a la place de =+
 //round. x is between 1 and 10 and ndig will be printed to
 // right of decimal point so rounding is ...
 for (= i = 1; i < ndig; i++)
 y = y/10.0000;
 x += y/2.0000;
 if (>= 10.0000) {= 1.0000; ie++;}
 if (ie<0)
 {
   *str++ = '0'; *str++ = '.';
   if (ndig < 0) ie = ie-ndig;
   for (= -1; i > ie; i--)  *str++ = '0';
 }
 for (i=0; i < ndig; i++)
 {
   k = x;
   *str++ = k + '0';
   if (==  ie ) *str++ = '.';
   x -= (y=k);
   x *= 10.0000;
  }
 *str = '\0';
}



y a t(il un lien avec la librairie MATH et Cosinus ?


:!!: donc MEFIANCE , tant que je (ou autre people) n'ai pas trouvé une explication valable.

le projet complet

si vous pouvez le tester , pour verifier si le programme plante avec Precision=6 dans Float2Ascii

_18F46K22_UART_test_COS_et_UART1_Interrupt_190121.zip


execution avec 4 decimales, NO problemo

Version : 21/01/2019
MikroC Pro 7.20
_18F46K22_UART_test_COS_et_UART1_Interrupt_190121.c
Test calcul cosinus Angle
Cos 0 1.0000
Cos 1 0.9998
Cos 2 0.9994
Cos 3 0.9986
Cos 4 0.9976
Cos 5 0.9962
Cos 6 0.9945
Cos 7 0.9925
Cos 8 0.9903
Cos 9 0.9877
Cos 10 0.9848
Cos 11 0.9816
Cos 12 0.9781
Cos 13 0.9744
Cos 14 0.9703
Cos 15 0.9659
Cos 16 0.9613
Cos 17 0.9563
Cos 18 0.9511
Cos 19 0.9455
Cos 20 0.9397
Cos 21 0.9336
Cos 22 0.9272
Cos 23 0.9205
Cos 24 0.9135
Cos 25 0.9063
Cos 26 0.8988
Cos 27 0.8910
Cos 28 0.8829
Cos 29 0.8746
Cos 30 0.8660
Cos 31 0.8572
Cos 32 0.8480
Cos 33 0.8387
Cos 34 0.8290
Cos 35 0.8192
Cos 36 0.8090
Cos 37 0.7986
Cos 38 0.7880
Cos 39 0.7771
Cos 40 0.7660
Cos 41 0.7547
Cos 42 0.7431
Cos 43 0.7314
Cos 44 0.7193
Cos 45 0.7071
Cos 46 0.6947
Cos 47 0.6820
Cos 48 0.6691
Cos 49 0.6561
Cos 50 0.6428
Cos 51 0.6293
Cos 52 0.6157
Cos 53 0.6018
Cos 54 0.5878
Cos 55 0.5736
Cos 56 0.5592
Cos 57 0.5446
Cos 58 0.5299
Cos 59 0.5150
Cos 60 0.5000
Cos 61 0.4848
Cos 62 0.4695
Cos 63 0.4540
Cos 64 0.4384
Cos 65 0.4226
Cos 66 0.4067
Cos 67 0.3907
Cos 68 0.3746
Cos 69 0.3584
Cos 70 0.3420
Cos 71 0.3256
Cos 72 0.3090
Cos 73 0.2924
Cos 74 0.2756
Cos 75 0.2588
Cos 76 0.2419
Cos 77 0.2250
Cos 78 0.2079
Cos 79 0.1908
Cos 80 0.1736
Cos 81 0.1564
Cos 82 0.1392
Cos 83 0.1219
Cos 84 0.1045
Cos 85 0.0872
Cos 86 0.0698
Cos 87 0.0523
Cos 88 0.0349
Cos 89 0.0175
Test Interrupt UART1
U;21;01;19;01;14;58#
;U;21;01;19;01;14;58#

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aides toi, le ciel ou Fantastpic t'aideras

Probleme effet de bords avec Float2Ascii
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 663
Âge : 34
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#2 Message par venom » lun. 21 janv. 2019 22:37

Bonsoir paulfjujo,

Il ne manquerait pas des fichiers dans ton zip ? Je n'arrive pas a compiler chez moi ?







@++
En fait tout est une question de BIT ? :-D

Probleme effet de bords avec Float2Ascii
Jérémy
Administrateur du site
Administrateur du site
Messages : 2369
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » mar. 22 janv. 2019 07:17

Les float toujours un sujet qui génèrent des difficultés!

Merci de ce retour d'expérience Paul.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Probleme effet de bords avec Float2Ascii
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1485
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » mar. 22 janv. 2019 11:03

venom a écrit :Bonsoir paulfjujo,

Il ne manquerait pas des fichiers dans ton zip ? Je n'arrive pas a compiler chez moi ?
@++



oops et pour cause, il manquait le source !

_18F46K22_UART_test_COS_et_UART1_Interrupt_190121.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aides toi, le ciel ou Fantastpic t'aideras

Probleme effet de bords avec Float2Ascii
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 663
Âge : 34
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#5 Message par venom » mar. 22 janv. 2019 22:00

Merci,

Je testerai ça demain matin si possible. :wink:






@++
En fait tout est une question de BIT ? :-D

Probleme effet de bords avec Float2Ascii
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 663
Âge : 34
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#6 Message par venom » mer. 23 janv. 2019 06:20

:oops: Quel boulet. J'ai tellement l'habitude du debug avec la programmation informatique. La forcement il faut le matos qui va bien pour essayé. Malheureusement je n'ai pas sa en stock :mur:
exit dehors!!
Désolé paulfjujo.







@++
En fait tout est une question de BIT ? :-D


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité