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 = 0deklarerar indexet som ett heltal (det vanligaste fallet) och sätter värdet till0vid den första iterationen.i < nanger iterationsvillkoret: närinår värdetnmisslyckas villkoret och slingan slutar köra.i++betyder att värdet påiökas med1vid 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
Övningsinstruktioner
- Initiera en lokal
doublex till ett. - Ange en
for-slinga.- Initiera ett heltal,
i, till0. - Sätt iterationsvillkoret som
imindre änn. - Öka
imed ett vid varje steg.
- Initiera ett heltal,
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)
*/