Problème de résultat d'une opération mathématique
Bonjour,
Je me lance dans la programmation en C sur microcontrôleur et je rencontre un problème d'ordre bizarre, voire inexpliqué.
Voici le code qui pose un soucis :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
void Display_Cursor(signed int lat, signed int lon) {
unsigned char latitude_y, longitude_x;
//Latitude and Longitude scaling for 128x64 display:
//Latitude: Input range is -90 to 90 degrees
//Longitude: Input range is -180 to 180 degrees
latitude_y = ((61*(90-lat))/180)+1;
longitude_x = ((125*(lon+180))/360)+1;
//Cursor drawing:
Glcd_H_Line(0, 127, latitude_y, 2);
Glcd_V_Line(0, 63, longitude_x, 2);
//Display latitude and longitude "translation" to fit on the screen
IntToStr(latitude_y,dispLatStr);
IntToStr(longitude_x,dispLonStr);
Glcd_Write_Text(dispLatStr,0,6,1);
Glcd_Write_Text(dispLonStr,0,7,1);
//Blinking
Delay_ms(500);
Glcd_Fill(0x00);
} |
Le problème c'est que la ligne verticale (longitude) ne s'affiche pas car elle est hors de l'écran (position longitude=196 sur un écran de 128 pixels). Cela peut être solutionné en affectant la valeur au paramètre "lon".
Pour résumer :
- Si le paramètre "lon" de la fonction est utilisé tel quel (sa valeur est de 166 à l'appel de la fonction), le résultat du calcul est faux.
- Si je met "lon = 166;" dans la fonction, le résultat est correct.
Ma question est simple : comment se fait-il qu'avec une même valeur, le résultat d'un calcul puisse être différent ?
Question bonus : pourquoi ce problème n'est pas rencontré pour le calcul de la latitude ?
Si vous avez besoin de plus de renseignements, n'hésitez pas.
Merci d'avance pour vos réponses.