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