C++ -> Rcpp 写経その2『ループで繰り返し計算』

// 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)
*/