Aan de slagGa gratis aan de slag

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 = 0 verklaart de index als een integer (de meest voorkomende situatie) en zet de waarde bij de eerste iteratie op 0.
  • i < n bepaalt de iteratievoorwaarde: zodra i de waarde n bereikt, faalt deze voorwaarde en stopt de lus.
  • i++ betekent dat de waarde van i bij elke iteratie met 1 toeneemt.

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

Cursus bekijken

Oefeninstructies

  • Initialiseer een lokale double x op één.
  • Schrijf een for-lus.
    • Initialiseer een integer, i, op 0.
    • Stel de iteratievoorwaarde in als i kleiner dan n.
    • Verhoog i bij elke stap met één.

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)
*/
Code bewerken en uitvoeren