[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 02/05 22:29 / Filesize : 107 KB / Number-of Response : 449
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

擬似乱数



386 名前:CryptGenRandomはいまいち [2007/04/10(火) 06:28:12 ]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include <time.h>
#define N 2147483647
#define kaisu 200
#define PI 3.141592653589

double win_rand(){
HCRYPTPROV hProv;BYTE b[4];
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
CryptGenRandom(hProv, 4, b);CryptReleaseContext(hProv, 0);
return (double)(b[0]+(b[1]<<8)+(b[2]<<16)+((b[3]&127)<<24))/2147483648;}

double xor128(){
static unsigned long x=123456789,y=362436069,z=521288629,w=88675123;unsigned long t;
t=(x^(x<<11));x=y;y=z;z=w; return(double)( w=(w^(w>>19))^(t^(t>>8)) )/4294967296; }

double xorHoge(){
static unsigned long x=123,y=456,z=78,w=90;unsigned long t;
t=(x^(x<<13));x=y;y=z;z=w; return(double)( w=(w^(w>>7))^(t^(t>>5)) )/4294967296; }

main(){unsigned int i,t;double n,x,y;
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=xor128();y=xor128();if(x*x+y*y<=1.0)n+=1;}
printf(">>18のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=xorHoge();y=xorHoge();if(x*x+y*y<=1.0)n+=1;}
printf(">>84のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=rand()/(RAND_MAX+1.0);y=rand()/(RAND_MAX+1.0);if(x*x+y*y<=1.0)n+=1;}
printf("  Cのrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=win_rand();y=win_rand();if(x*x+y*y<=1.0)n+=1;}
printf(" winのrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);}






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<107KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef