C++ -> Rcpp 写経その2『ループで繰り返し計算』
- 『ループで繰り返し計算』
- その4 ループで加算
// sample04.cpp #include <stdio.h> main(void) { int n; // 変数の宣言 int sum = 0; // 変数の宣言と初期化 // for ループ for( n=1 ; n<=10 ; n++ ){ sum += n; // 足し上げる } printf("The sum is %d\n", sum ); }
// sample04R.cpp #include <stdio.h> #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] int sample04(int n0, int n1) { int n; // 変数の宣言 int sum = 0; // 変数の宣言と初期化 // for ループ for( n=n0 ; n<=n1 ; n++ ){ sum += n; // 足し上げる } //printf("The sum is %d\n", sum ); return(sum); } /*** R n0 = 1; n1 = 10; sample04(n0,n1) */ -その5 whileループで収束 >|cpp| // sample05.cc #include <stdio.h> // 与えた x に対する y = sqrt(x) を計算する。 main(void) { double x, y; double a, da; printf("Input a positive number ="); scanf("%lf", &x ); // 正の実数をキーから読み込む。 a = x; // aの値をまずこうする // do while ループ do{ da = 0.5*(a - x/a); // a の減少分 da を計算する a -= da; // a を da だけ減らす }while( da > 0.000001 ); // 減少分がこの程度大きい間ループを続ける y = a; // これが答えの値 printf("The root of %lf is %lf.\n", x, y ); }
// sample05R.cpp #include <stdio.h> #include <Rcpp.h> using namespace Rcpp; // 与えた x に対する y = sqrt(x) を計算する。 // [[Rcpp::export]] double sample05(double x,double e = 0.000001) { double y; double a, da; //printf("Input a positive number ="); //scanf("%lf", &x ); // 正の実数をキーから読み込む。 a = x; // aの値をまずこうする // do while ループ do{ da = 0.5*(a - x/a); // a の減少分 da を計算する a -= da; // a を da だけ減らす }while( da > e ); // 減少分がこの程度大きい間ループを続ける y = a; // これが答えの値 //printf("The root of %lf is %lf.\n", x, y ); return y; } /*** R x = 11; sample05(x) sqrt(x) */