Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたの知らない乱数の世界
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yosuke Furukawa
PRO
August 18, 2017
Programming
0
180
あなたの知らない乱数の世界
リクルートテクノロジーズの社内勉強会で発表した乱数の話です。
Yosuke Furukawa
PRO
August 18, 2017
Tweet
Share
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
200
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
4.9k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.5k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
300
Removing Corepack
yosuke_furukawa
PRO
9
1.8k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3k
Strip Types と Storage
yosuke_furukawa
PRO
4
470
Module Harmony について
yosuke_furukawa
PRO
4
1.8k
LTのやり方
yosuke_furukawa
PRO
16
2.9k
Other Decks in Programming
See All in Programming
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
6
680
Python’s True Superpower
hynek
0
110
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
180
並行開発のためのコードレビュー
miyukiw
0
1.3k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
800
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
660
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
Featured
See All Featured
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
50k
Building an army of robots
kneath
306
46k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
KATA
mclloyd
PRO
34
15k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Transcript
͋ͳͨͷΒͳ͍ ཚͷੈք 2017/08/18 @ Recruit Tech Study
ͱཚ
ͦͦͷൃ
ৄ͍͠ܦҢͪ͜ΒΛ
RandඍົʹϥϯμϜ͡Όͳ͍ʁ
͜͜Ͱ͍͏Randͱ • ͓ͦΒ͘ MySQL ͔ Java ͔ͳʹ͔ͷ random ؔʁ •
ͩͱͨ͠ΒϥϯμϜ͡Όͳ͍ͱݴΘͳ͍͕ ࣭ͷѱ͍ϥϯμϜؔͰ͋Δ͜ͱ͔֬ɻ
͜͜Ͱ͍͏Randͱ • ͓ͦΒ͘ MySQL ͔ Java ͔ͳʹ͔ͷ random ؔʁ •
ͩͱͨ͠ΒϥϯμϜ͡Όͳ͍ͱݴΘͳ͍͕ ࣭ͷѱ͍ϥϯμϜؔͰ͋Δ͜ͱ͔֬ɻ ϥϯμϜؔͷ࣭ͱԿ͔ʁ
JavaͰMath.random() ͬͯ·͔͢ʁ
Math.random() ʹද͞ΕΔ ཚൃੜثٙࣅཚͰ͋Γɺ Javaͷٖࣅཚͷ࣮ ઢܗ߹ಉ๏
Javaͷ Math.random ͷΞϧΰ ϦζϜઢܗ߹ಉ๏ • "ܭࢉ୯७͕ͩ͋Μ·ΓϥϯμϜ͡Όͳ͍ཚ ੜث" • X[n+1] =
a * X[n] + b mod M
ઢܗ߹ಉ๏ const A = 1103515245 const B = 12345 const
M = 2^32 var X function rand() { X = (A * X + B) % M return X } // 32,21,18,11,6,17,20,27,32,21,18
ઢܗ߹ಉ๏ const A = 1103515245 const B = 12345 const
M = 2^32 var X function rand() { X = (A * X + B) % M return X } // 32,21,18,11,6,17,20,27,32,21,18 ۮ حͷॱʹฒΜͰΔ
ઢܗ߹ಉ๏ const A = 1103515245 const B = 12345 const
M = 2^32 var X function rand() { X = (A * X + B) % M return X } // 32,21,18,11,6,17,20,27,32,21,18 ۮ حͷॱʹฒΜͰΔ ࠷ॳͷ9<> ॳظ ͕ಉͩͬͨ͡Βඞͣಉ͡ྻ͕࡞ΒΕΔ
ઢܗ߹ಉ๏ const A = 1103515245 const B = 12345 const
M = 2^32 var X function rand() { X = (A * X + B) % M return X } // 32,21,18,11,6,17,20,27,32,21,18 ۮ حͷॱʹฒΜͰΔ ࠷ॳͷ9<> ॳظ ͕ಉͩͬͨ͡Βඞͣಉ͡ྻ͕࡞ΒΕΔ TFFEͱݴ͏
ઢܗ߹ಉ๏ • X[n+1] = a * X[n] + b mod
M • 1 : ۮحͷॱংͰฒͿ • 2 : ࠷ॳͷX[0](ॳظ) ͕ಉͩͬͨ͡Βඞ ͣಉ͡ྻ͕࡞ΒΕΔ
ઢܗ߹ಉ๏ • X[n+1] = a * X[n] + b mod
M • 1 : ۮحͷॱংͰฒͿ • 2 : ࠷ॳͷX[0](ॳظ) ͕ಉͩͬͨ͡Βඞ ͣಉ͡ྻ͕࡞ΒΕΔ ࣍ͷཚ͕༧ଌͰ͖Δɻ ཚʹنଇੑ͕͋Δɻ
ઢܗ߹ಉ๏ • X[n+1] = a * X[n] + b mod
M • 1 : ۮحͷॱংͰฒͿ • 2 : ࠷ॳͷX[0](ॳظ) ͕ಉͩͬͨ͡Βඞ ͣಉ͡ྻ͕࡞ΒΕΔ ࣍ͷཚ͕༧ଌͰ͖Δɻ ཚʹنଇੑ͕͋Δɻ ղ๏ΑΓΑ͍ΞϧΰϦζϜΛબͿ -JLFϝϧηϯψɾπΠελ 9034IJGU
ઢܗ߹ಉ๏ • X[n+1] = a * X[n] + b mod
M • 1 : ۮحͷॱংͰฒͿ • 2 : ࠷ॳͷX[0](ॳظ) ͕ಉͩͬͨ͡Βඞ ͣಉ͡ྻ͕࡞ΒΕΔ TFFEͱճ͔͑͞Ε ࣍ͷཚ͕༧ଌՄೳ
ઢܗ߹ಉ๏ • X[n+1] = a * X[n] + b mod
M • 1 : ۮحͷॱংͰฒͿ • 2 : ࠷ॳͷX[0](ॳظ) ͕ಉͩͬͨ͡Βඞ ͣಉ͡ྻ͕࡞ΒΕΔ TFFEͱճ͔͑͞Ε ࣍ͷཚ͕༧ଌՄೳ ٙࣅཚͱ͍͏ͷجຊ͜͏͍͏ͷ
randomؔͷ࣭ͱ • ٖࣅཚͰ͋Δ߹ɺཚ͕Ұ༷ʹ͢Δ ͜ͱʢಉ͡ࣈ͕ग़ʹ͍͘͜ͱʣ • نଇੑ͕ͳ͍͜ͱʢۮɾح͕ަޓʹग़ͨ Γ͠ͳ͍͜ͱʣ
randomؔͷ࣭ͱ • ٖࣅཚͰ͋Δ߹ɺཚ͕Ұ༷ʹ͢Δ ͜ͱʢಉ͡ࣈ͕ग़ʹ͍͘͜ͱʣ • نଇੑ͕ͳ͍͜ͱʢۮɾح͕ަޓʹग़ͨ Γ͠ͳ͍͜ͱʣ ࣭ͷྑ͍ϥϯμϜؔʢҰ༷ʹཚ͕͠ɺपظੑ͕͘ɺنଇੑ͕ͳ͍ͷʣ ͷྫɿϝϧηϯψɾπΠελɺ9034IJGU
randomؔͷ࣭ͱ • ٖࣅཚͰ͋Δ߹ɺཚ͕Ұ༷ʹ͢Δ ͜ͱʢಉ͡ࣈ͕ग़ʹ͍͘͜ͱʣ • نଇੑ͕ͳ͍͜ͱʢۮɾح͕ަޓʹग़ͨ Γ͠ͳ͍͜ͱʣ ࣭ͷྑ͍ϥϯμϜؔʢҰ༷ʹཚ͕͠ɺपظੑ͕͘ɺنଇੑ͕ͳ͍ͷʣ ͷྫɿϝϧηϯψɾπΠελɺ9034IJGU
randomؔͷ࣭ͱ • ٖࣅཚͰ͋Δ߹ɺཚ͕Ұ༷ʹ͢Δ ͜ͱʢಉ͡ࣈ͕ग़ʹ͍͘͜ͱʣ • نଇੑ͕ͳ͍͜ͱʢۮɾح͕ަޓʹग़ͨ Γ͠ͳ͍͜ͱʣ ࣭ͷྑ͍ϥϯμϜؔʢҰ༷ʹཚ͕͠ɺपظੑ͕͘ɺنଇੑ͕ͳ͍ͷʣ ͷྫɿϝϧηϯψɾπΠελɺ9034IJGU ͪͳΈʹ7ͷ.BUISBOEPN
͜ͷ9034IJGU
͞Βʹຊ
ݫີʹϥϯμϜͳrandomؔͱ͔ͳ͍?
ຊͩΖ͏͔ʁ
ٙࣅ͡Όͳ͍ཚ͋Δ • ϋʔυΣΞཚੜثʢӳޠͩͱTrue Random Number Generator TRNG) • /dev/random •
ࡶԻ • ์ࣹੑ࣭ͷ่յ • ͳͲͳͲɺଞʹͨ͘͞Μ͋Δ
/dev/random ΩʔϘʔυϚεɺσΟεΫૢ࡞ͱ͍ͬͨૢ࡞هΛݩʹ৭Μͳ ใΛஷΊ͓͖ͯɺ͔ͦ͜ΒϥϯμϚΠζ͞ΕͨใΛग़͢
/dev/random ΩʔϘʔυϚεɺσΟεΫૢ࡞ͱ͍ͬͨૢ࡞هΛݩʹ৭Μͳ ใΛஷΊ͓͖ͯɺ͔ͦ͜ΒϥϯμϚΠζ͞ΕͨใΛग़͢ ૢ࡞ه͕Ұఆஷ·Βͳ͍ͱ ػೳ͠ͳ͍
ࡶԻΛͬͨํ๏ ిؾճ࿏Ͱ0/Ͱ0''Ͱͳ͍ঢ়گΛ࡞͓ͬͯ͘ɻ ͦͷ্ͰࡶԻͱ͍͏ཧݱΛͬͯPS͕ϥϯμϜʹग़ΔΑ͏ʹ͢Δɻ )JHI )JHI
ࡶԻΛͬͨํ๏ *OUFM*WZ#SJEHFʹ࣮ࡁΈɻ
ࡶԻΛͬͨํ๏ *OUFM*WZ#SJEHFʹ࣮ࡁΈɻ ͨͩ͠ɺࡶԻʹΑΔํ๏ిྗফඅྔ͕ܹ͍͠ ΤωϧΪʔ͕খ͗ͯ͢͞ภΓ͕͋ΔɺͦͷͨΊιϑτΣΞͷิॿ͕ඞཁ
ݪࢠ่֩յΛͬͨํ๏
ݪࢠ่֩յΛͬͨํ๏ ”70ஹݸͷݪࢠͷݪࢠ่֩յΛར༻ͨ͠ͷͰɺߏ୯७ɻ” ”ઢݯͷۙ͘ʹμΠΦʔυΛઃஔ͠ɺ͜͜ͰύϧεΛݕ͢Δɻ”
ݪࢠ่֩յΛͬͨํ๏ ”70ஹݸͷݪࢠͷݪࢠ่֩յΛར༻ͨ͠ͷͰɺߏ୯७ɻ” ”ઢݯͷۙ͘ʹμΠΦʔυΛઃஔ͠ɺ͜͜ͰύϧεΛݕ͢Δɻ”
ʊਓਓਓਓਓʊ ʼɹύϧεɹʻ ʉY^Y^Y^Yʉ
͑ɺͦΕඃരɾɾɾ
ඃര͠ͳ͕ΒཚΛऔΔͷ ࠷ߴʹϩοΫ
"ݪࢠ่֩յͱ͍͏ͱɺ์ࣹઢ ඃΛࢥ͍ු͔ͯ͠·͏͕ɺ ઢྔݶΓͳ͘͘ɺਓମʹ Өڹ͢ΔϨϕϧͰͳ͍ɻ"
·ͱΊ • ཚܯ • ٖࣅཚͷྑ͠ѱ͠ • ϋʔυΣΞཚੜثͱ͍͏ਅͷཚΛ࡞ Δͷ͋Δ • ཚԞਂ͍ɺΈΜͳ৭ʑௐͯΈΔͱָ͍͠