2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

プログラミング!PHP詳しい人すぐ来て!!

1 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 01:59:01.02 ID:IbGH5e2G0.net
乱数のシードを設定したいんだけどさ
5個の乱数のシードをパラレルで動かしたい。

シードAの乱数が必要になったり
シードBの乱数が必要になったり
どの乱数列が必要になるかは分からない。

その度に乱数を初期化すると
シードの乱数列の最初からやり直しになってしまう

どうすればいいの?

2 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:00:07.96 ID:XeST2ULS0.net
多分ブルーシート引いてダンボール巻いて寝たら暖かいと思うよ!!

3 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:00:13.67 ID:jAC1UGfq0.net
g

4 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:00:56.88 ID:HtNxclmd0.net
まずパラレルの意味がわからない
並列処理したいのか?

5 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:02:10.49 ID:DHtLbee50.net
べつべつのシード使った関数を5つ用意して呼び分ければいいんじゃね

6 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:02:16.34 ID:rhfJ0FlG0.net
PHPやったことあるけどシードとか知らん

7 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:02:23.34 ID:arLBV3hG0.net
PHPはホームページ作るやつだろ

8 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:03:36.24 ID:IbGH5e2G0.net
>>4
並列じゃない!すみません!
シードAで初期化した乱数をその状態にしたまま、
シードBの乱数を発生されたり、
かと思えばまたさっきのAの続きを取り出したり

並列処理じやないです!

9 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:03:57.04 ID:4AMfS1oI0.net
Personal Home Page
後付でHypertext Preprocessor

10 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:04:15.44 ID:TdUvzjra0.net
パラレル関係なくてワロタ

そんなの乱数の初歩の初歩だろ死ねよ

11 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:05:11.06 ID:IbGH5e2G0.net
>>5
seand()を別のシードで初期化したら
台無しじゃない?

12 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:05:43.20 ID:4AMfS1oI0.net
PHPに自作関数的なものあるか知らないけど
引数にseed渡してrand()返すような関数作るとかでは駄目なの?

13 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:05:53.68 ID:IbGH5e2G0.net
>>10
本当に初歩で
やり方知ってるなら教えて下さい!!!

14 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:06:17.96 ID:+3R1IGhA0.net
同じシードを与えると同じ乱数列が得られる事を保証したいなら
自分で疑似乱数を書く必要があると思う
rand()もmt_rand()もそれを保証していない

15 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:06:45.45 ID:4AMfS1oI0.net
javascriptで生成するのは駄目なの?
PHP詳しくないからあれだけど(´・ω・`)

16 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:07:54.40 ID:IbGH5e2G0.net
>>12
その関数の中で、引数で渡されたシードで初期化するのですか?
staticなインクリメント変数を作っておいて
乱数の生成回数を記録しておいて
その変数の数値の分だけrandを空回しするとかですか?
段々効率が悪くなりそうで怖いです

17 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:08:28.94 ID:OUrp8E2D0.net
PHPには乱数ジェネレーターオブジェクトはないので自作するしかないな
方法は2つ、MT19937あたりをPHPで独自実装するか、
C++11の乱数オブジェクトを使うモジュールを作ってPHPから呼ぶか

18 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:11:21.98 ID:IbGH5e2G0.net
>>14
int my_rand_1(int seed){
static x=seed;
return seed*1234+5678;
}

みたいな関数を5個作れってことですかね

19 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:11:50.28 ID:IbGH5e2G0.net
>>17
ふぇぇぇぇ難しいお…

20 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:11:53.42 ID:4AMfS1oI0.net
>>16
なにそれ面倒そう
一個聞きたいんだけど、
5個の乱数が欲しいのか、乱数のシードが5個欲しいのかどっちなの?

21 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:13:30.34 ID:DHtLbee50.net
あらかじめ10万個くらいずつ作っといて5つの配列にしまっとく
順に取り出して使う
どうよ?

22 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:14:28.20 ID:4AMfS1oI0.net
そして乱数を使う場合は一つのシードから乱数を出すのか
複数のシードから何個ずつか使うのかどうしたいんだろう

23 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:14:57.04 ID:IbGH5e2G0.net
やりたいことはね
VIPのIDを乱数のシードにしたいんです

でもsrandの引数はintの上限があるので
IDを5個のシードに分けたいだけなんす…

逆にいうとIDがシード(int)に収まる数値で
ユニークな数字になればいいんだす

24 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:16:26.84 ID:IbGH5e2G0.net
でもIDの方が圧倒的に数値の幅が大きいので
違うIDでも同じシードになることもあるから
多分そんなのはダメなんす

25 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:17:27.16 ID:OUrp8E2D0.net
>>18
No

class MyRand {
 private $seed;
 public function __construct($seed) { $this->seed = $seed; }
 public int get() { return TODO; }
}

$rand1 = new MyRand(0);
$rand2 = new MyRand(0);
$rand3 = new MyRand(0);
$rand4 = new MyRand(0);
$rand5 = new MyRand(0);

こう

26 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:17:40.16 ID:IbGH5e2G0.net
>>20
最終的に求めたい数値は一つです
5個のシードから生まれた乱数を
ガッチャンコして一つの数値にします

27 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:18:36.66 ID:OUrp8E2D0.net
>>23
hashでも取ればいいだけだろ

28 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:20:27.62 ID:4AMfS1oI0.net
IDから求めるってASCIIコードとか使うのかな
というか5つシードって区切りが分からないんだが
英数字シード*4と末尾*1で5個?

29 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:20:55.92 ID:IbGH5e2G0.net
>>25
TODOの中身は
$this->seed = ($this->seed*1234+5678)%PHP_INT_MAX;
return $this->seed;
とかで大丈夫ですかね…?

30 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:21:11.02 ID:+3R1IGhA0.net
>>27
これやね

31 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:22:46.69 ID:+3R1IGhA0.net
>>29
それじゃseedがintである時点でIDが違っても同じ乱数列が生成されちゃうよ

32 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:22:52.96 ID:4AMfS1oI0.net
>>26
そんなの余裕じゃん
本当に関数作れば良いだけ

って今調べたらPHPってsrand()の引数いらないのか…?

33 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:24:36.38 ID:IbGH5e2G0.net
>>28
そのとーりです!

>>27
ハッシュ!!!
MD5とSHA1しか知らないんですが
両方ともシードの数値の上限超えてませんかね…

34 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:29:44.87 ID:4AMfS1oI0.net
>>33
なら2個の英数字を36進数→10進数にする関数作って、
まずその4個の数値を
a/b/c/d
ってして割ってって、それをe(末尾)で掛ければ良い感じに乱数っぽくなりそう
かなり適当だけどね!

35 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:31:30.45 ID:4AMfS1oI0.net
あれ、意味がわからない…

36 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:32:21.33 ID:IbGH5e2G0.net
それだと違うIDでも同じ数値になることが多そうな気がして…

37 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:33:03.73 ID:+3R1IGhA0.net
Windowsでなけりゃintが64bitだからそもそも悩む必要なさそうだが

38 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:33:50.61 ID:4AMfS1oI0.net
>>36
そうかなあ
実数になるからそこまで被らないと思ったのだけど…

39 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:34:38.78 ID:OUrp8E2D0.net
>>38
整数部分しか意味ないから全く無駄だな

40 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:35:52.36 ID:4AMfS1oI0.net
>>39
ああ言い忘れてたけど、1で割り切れるまで10掛けてけば良いかと

41 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:38:53.55 ID:4AMfS1oI0.net
>>39
あと多分これそのままじゃ整数部分ない

42 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:39:44.21 ID:HtNxclmd0.net
ここまで来るとなにか他のものをシードに据えた方がいいんじゃねーの

43 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:46:11.66 ID:+3R1IGhA0.net
IDの56bitを2分割して片方をsrand()に、もう一方をmt_srand()に与え
rand()とmt_rand()の結果の排他的論理和を取るだけで>>1の目的は達せられる

44 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:57:33.21 ID:OUrp8E2D0.net
>>43が天才か

45 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:58:13.39 ID:FLkFKzz60.net
IDをシード値にしたいという欲求が出てくる意味がわからない
本当にやりたいことは何なんだろうか

46 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 02:58:20.38 ID:IbGH5e2G0.net
>>43
おぉ…そういうやり方は大アリですね!!
てかIDって56bitなんですか?
まぁアスキーに変換するとややこしいですが
結局はa-zA-Z0-9+/の64個の文字で出来てるので1桁を6bitで表せて、IDは9桁なので54bit!
半分にしてぶち込めばなんかいけそうな気がしてきました!!

47 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 03:07:11.30 ID:IbGH5e2G0.net
排他的論理和を取るのは
生まれた数値を一つにガッチャンコする時に
0と1の数に偏りを持たせないためという認識でOK?

48 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 03:07:48.14 ID:+3R1IGhA0.net
phpがPOSIXのrandom_r()相当のを実装してくれてたら誰も悩まないのに

49 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 03:08:49.43 ID:+3R1IGhA0.net
>>47
足して2で割ってもいいような気はするけどね

50 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 03:11:07.92 ID:IbGH5e2G0.net
>>49
XORの方が玄人っぽくてかっこいい!

51 :以下、\(^o^)/でVIPがお送りします:2014/09/09(火) 03:11:16.10 ID:OUrp8E2D0.net
>>49
足すとオーバーフローした時に困ったことになる
文字列結合ならおk

総レス数 51
12 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★