Programme tous simple, j'ai un nombre avec beaucoup de chiffres après la virgule, si je l'affiche avec Serial.print, je perd des chiffres ssignificatif.
1234.56789123456789 devient 1234.5678710937
il y a quelque chose que je ne comprend pas, d'après la définition un float peut aller jusqu'à 10-38
float Flottant (réel) -3.410-38 à 3.41038
Est-ce juste un problème d'affichage?
Est-ce que le nombre qui est stocké dans la variable reste le bon? ou ai je vraiment perdu de l'information?
J'ai multiplié par 100000 pour voir si je perdais de l'information et je crois que oui.
Quel type de variable dois-je utiliser?
float nombre = 1234.56789123456789;
void setup()
{
while (!Serial);
Serial.begin(9600);
Serial.println(nombre,10);
}
void loop()
{
}
Dans l'environnement ardiono (avr), les float sont codés sur 32 bits dont 23 bits de mantisse. Ce qui donne environ 7 chiffres décimaux significatifs.
Il est donc illusoire de vouloir avoir une précision de plus de 7 chiffres.
C'est le microcontroleur qui limite.
Un avr 8bits (carte UNO, mega,nano,léonardo) sera moins performant qu'un ARM 32 bits.
En ARM 32 bits pour arduino ou trouve les cartes DUE et Zéro .
En ARM il existe d'autres cartes avec d'autres micros plus performants que ceux des DUE et zero.
Plus performant par exemple sur la capacité mémoire et la fréquence d'horloge.
Mais pour la précision des calculs ils restent de l'ARM 32 bits.
Ils se programment avec une autre IDE.
Exemple cartes Nucleo de STmicro programmable avec l'IDE Mbed.