Wortels berekenen met een for-lus
Net als in R voert een C++ for-lus dezelfde code een opgegeven aantal keren uit, waarbij per iteratie alleen een indexwaarde verandert. De syntaxis voor een for-lus is in C++ wel iets complexer dan in R.
for(int i = 0, i < n, i++) {
// Do something
}
int i = 0verklaart de index als een integer (de meest voorkomende situatie) en zet de waarde bij de eerste iteratie op0.i < nbepaalt de iteratievoorwaarde: zodraide waardenbereikt, faalt deze voorwaarde en stopt de lus.i++betekent dat de waarde vanibij elke iteratie met1toeneemt.
Hier vul je de definitie aan van een functie om de vierkantswortel te berekenen met de Babylonische methode. (Voor echte toepassingen kun je beter gewoon sqrt() gebruiken; die functie gebruikt een sneller, modern algoritme.)

Deze oefening maakt deel uit van de cursus
R-code optimaliseren met Rcpp
Oefeninstructies
- Initialiseer een lokale
doublex op één. - Schrijf een
for-lus.- Initialiseer een integer,
i, op0. - Stel de iteratievoorwaarde in als
ikleiner dann. - Verhoog
ibij elke stap met één.
- Initialiseer een integer,
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
#include
using namespace Rcpp;
// [[Rcpp::export]]
double sqrt_approx(double value, int n) {
// Initialize x to be one
double x = ___;
// Specify the for loop
___(int i = ___; ___; ___) {
x = (x + value / x) / 2.0;
}
return x;
}
/*** R
sqrt_approx(2, 10)
*/