Programmeren in C/Berekeningen: verschil tussen versies

k
geen bewerkingssamenvatting
(3^4 != 61 maar 81)
kGeen bewerkingssamenvatting
 
|Titel=
|Code=
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <math.h>
printf("%Lf\n", powl(7.0L, 2.0L)); // 49.000000
}
</syntaxhighlight>
</source>
}}
 
|Titel=
|Code=
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
 
printf("%i\n", a--); // print 2 (a is nu 1)
}
</syntaxhighlight>
</source>
}}
 
|Titel=
|Code=
<sourcesyntaxhighlight lang="c">
#include <stdlib.h>
#include <stdio.h>
}
}
</syntaxhighlight>
</source>
}}
Wanneer deze code gecompileerd wordt, en een aantal keer uitgevoerd wordt zal deze echter telken male dezelfde random tekenreeks op het scherm getoond worden. Dit is zo omdat er vele sequenties van random getallen beschikbaar zijn, het oproepen van rand() geeft gewoon het volgende getal uit die sequentie terug. Bij het begin van een programma wordt dus telkens dezelfde sequentie van voorafaan afgelopen. Gelukkig is hiervoor een oplossing. Door de functie <i>void srand(unsigned int seed)</i> toe te voegen bij het begin van de code is het mogelijk om een selectie van de randomsequentie te maken. Indien u voor de for los <i>srand(0)</i> zou toevoegen zou u terug hetzelfde resultaat krijgen als het vorige programma (er wordt dus standaard de sequentie gebruikt die samengaan met het nummer nul). Maar nu lost dit het probleem nog niet op. Onder Linux is het bijvoorbeeld mogelijk om de randomgenerator te <i>seeden</i> met de huidige systeemtijd. Dit kan er dan bijvoorbeeld uitzien als in volgende code:
|Titel=
|Code=
<sourcesyntaxhighlight lang="c">
#include <stdlib.h>
#include <stdio.h>
}
}
</sourcesyntaxhighlight>}}
De functie <i>time(NULL)</i> (vereist <i>#include <time.h> </i>) geeft gewoon de huidige systeemtijd in seconden (een grote integer) terug. Andere compilers en omgevingen hebben andere methodes om de random generator te seeden.
Maar een opmerking hier is toch op zijn plaats: in de informatica bestaat niets zoals een perfect willekeurig getal, tenzij hier extra exotische hardware aan toegevoegd wordt. Indien men in deze context bijvoorbeeld weet met welk getal de random generater geseed zal worden zal men alle random getallen op voorhand reeds bepalen. De reden hiervoor is simpel, een computer kan niets anders doen dan reageren volgens een geprogrammeerd patroon op zijn omgeving. Dit kan enkel meer complex gemaakt worden maar nooit uitgesloten worden.
1.071

bewerkingen

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.