Het gebruik van de standaard C include file <math.h>.

© 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.

<math.h>

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.