© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.
De include file math.h is opgenomen in de C ANSI standaard. Deze headerfile bevat een aantal constanten en functies om te werken met het floating point getallen.
Om math functies te kunnen gebruiken moet libm.a meegelinkt worden. Om floating
point getallen te kunnen gebruiken met printf
moet ook de library
libprintf_flt.a meegelinkt worden:
Om printf met floatsing point getallen te kunnen gebruiken is daarnaast ook
een extra Custom Linker Option nodig: -Wl,-u,vfprintf
Je moet eerst op de knop Custom Options klikken (links), vervolgens [Linker Options] selecteren en dan in het veld naast de Add knop intypen:
-Wl,-u,vfprintf
Tot slot moet je dan nog op de Add knop drukken.
Voorbeeld:
#include <math.h>
#include "lcd.h"
int main(void) {
double x = M_PI;
char buffer[17];
lcd_init();
snprintf(buffer, sizeof buffer, "Dit is \xf7:");
lcd_puts(buffer);
lcd_goto(1, 0);
snprintf(buffer, sizeof buffer, "%lf", x);
lcd_puts(buffer);
while (1);
return 0;
}
Nog een voorbeeld:
#include <math.h>
#include "lcd.h"
int main(void) {
float f = sin(1);
double d = sin(1);
char buffer[17];
lcd_init();
snprintf(buffer, sizeof buffer, "f = %.10f", f);
lcd_puts(buffer);
lcd_goto(1, 0);
snprintf(buffer, sizeof buffer, "d = %.10lf", d);
lcd_puts(buffer);
while (1);
return 0;
}
Uitvoer:
f = 0.8414710045
d = 0.8414710045
Terwijl de rekenmachine zegt: 0,8414709848078965066525023216303
Dus zowel float
als double
hebben bij de AVR C
compiler voor de ATmega32 slechts minimaal 6 en maximaal 9 significante cijfers
(32 bits floats). Klopt want sizeof(float) == sizeof(double)
== 2
.