乱数の例題(2)

乱数の例題(3)

さて、0.0 から 1.0 までの乱数は関数にしておいた方が便利だろう。そこで まずは、C のプログラムについて関数にしてみる。関数名は myrand() にしよう。

C 版 myrand

/* randtest.c */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define REPEAT_COUNT 100

double
myrand()
{
	return ((double)rand()) / ((double)RAND_MAX + 1.0);
}
  
int
main()
{
	int i;
	double r;

	srand((unsigned int)time(0));
	for(i = 0; i < REPEAT_COUNT; i++)
	{
		r = myrand();
		printf("%lf\n", r);
	}
	return 0;
}

C++ 版

さて、今の場合 program が短いので上記 C でも特に問題はない。しかし、 もし他の library と link する必要があって他でも myrand という名前が 使われていたらどうすればよいだろう? C では、お互い気をつけましょうとか名前のルールを別途定めましょうと言う しか手段は無い。ましてや rand という関数名は使えない。

一方 C++ の方は名前空間で分けるという手段がある。この 場合でも、名前空間の名前が一致してしまう可能性はあるが、関数名などと違って ずっと大きな範囲にすることができるので、名前の衝突回避は格段に楽になる。 関数名を rand にすることすらできる。以下にその例を示そう。

/* randtest.cpp */

#include <iostream>
#include <cstdlib>
#include <ctime>

#define REPEAT_COUNT 100

namespace mylib
{
double
rand()
{
	return ((double)std::rand()) / ((double)RAND_MAX + 1.0);
}
}

int
main()
{
	int i;
	double r;

	std::srand((unsigned int)std::time(0));
	for(i = 0; i < REPEAT_COUNT; i++)
	{
		r = mylib::rand();
		std::cout << r << std::endl;
	}
	return 0;
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-07 (木) 13:58:26