■ このスレッドは過去ログ倉庫に格納されています
プログラミング!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 ★