Kom igångKom igång gratis

Beräkna kvadratrötter med en for-slinga

Precis som i R kör C++ for-slingor samma kod ett visst antal gånger och ändrar bara ett indexvärde för varje iteration. Syntaxen för en for-slinga är dock något mer komplex än i R.

for(int i = 0, i < n, i++) {
  // Do something
}
  • int i = 0 deklarerar indexet som ett heltal (det vanligaste fallet) och sätter värdet till 0 vid den första iterationen.
  • i < n anger iterationsvillkoret: när i når värdet n misslyckas villkoret och slingan slutar köra.
  • i++ betyder att värdet på i ökas med 1 vid varje iteration.

Här ska du slutföra definitionen av en funktion som beräknar kvadratroten med hjälp av den babyloniska metoden. (I verklig kod bör du använda sqrt(), som använder en snabbare modern algoritm.)

Den här övningen är en del av kursen

Optimera R-kod med Rcpp

Visa kurs

Övningsinstruktioner

  • Initiera en lokal double x till ett.
  • Ange en for-slinga.
    • Initiera ett heltal, i, till 0.
    • Sätt iterationsvillkoret som i mindre än n.
    • Öka i med ett vid varje steg.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

#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)
*/
Redigera och kör kod