Rから他言語利用(インチキ版)
よいこはRから他言語利用(ご本家)を使うこと。
インチキなやり方で,ほかの言語によるプログラムと連絡を取る
simulation <- function(n) { sink("urand.dat") # 乱数をファイルに書き出す for (i in 1:n) cat(runif(2), "\n") sink() unlink("result.dat") # 結果ファイルを消去しておく system("./get.pi urand.dat result.dat") # 下請けプログラム起動 while (!file.exists("result.dat")) Sys.sleep(1) # 計算終了を待つ scan("result.dat") # 結果を読みとる }
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MXLN 1024 int main(int argc, char *argv[]) { double x, y, pi = 0, n = 0; char *p; char param[MXLN]; FILE *in, *out; if (argc != 3) return(EXIT_FAILURE); if ((in = fopen(argv[1], "r")) == NULL) return(EXIT_FAILURE); if ((out = fopen(argv[2], "w")) == NULL) return(EXIT_FAILURE); for (;;) { fgets(param, MXLN, in); if (feof(in)) break; p = strtok(param, " ,\t"); x = atof(p); p = strtok(NULL, " ,\t"); y = atof(p); n++; if (x*x+y*y < 1) pi++; } fprintf(out, "%g\n", pi/n*4); return(EXIT_SUCCESS); }
> simulation(20000) Read 1 item [1] 3.1384