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
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
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
9
3.7k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.1k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
230
Removing Corepack
yosuke_furukawa
PRO
9
1.6k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
2.8k
Strip Types と Storage
yosuke_furukawa
PRO
4
410
Module Harmony について
yosuke_furukawa
PRO
3
1.7k
LTのやり方
yosuke_furukawa
PRO
16
2.6k
AppRouter Panel Talk
yosuke_furukawa
PRO
3
810
Other Decks in Programming
See All in Programming
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
420
GraphRAGの仕組みまるわかり
tosuri13
8
520
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
1
410
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
120
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
4
250
WebViewの現在地 - SwiftUI時代のWebKit - / The Current State Of WebView
marcy731
0
110
エラーって何種類あるの?
kajitack
5
330
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
610
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
260
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
460
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
290
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
Featured
See All Featured
It's Worth the Effort
3n
185
28k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
4 Signs Your Business is Dying
shpigford
184
22k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
How STYLIGHT went responsive
nonsquared
100
5.6k
Music & Morning Musume
bryan
46
6.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
Art, The Web, and Tiny UX
lynnandtonic
299
21k
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ʉ
͑ɺͦΕඃരɾɾɾ
ඃര͠ͳ͕ΒཚΛऔΔͷ ࠷ߴʹϩοΫ
"ݪࢠ่֩յͱ͍͏ͱɺ์ࣹઢ ඃΛࢥ͍ු͔ͯ͠·͏͕ɺ ઢྔݶΓͳ͘͘ɺਓମʹ Өڹ͢ΔϨϕϧͰͳ͍ɻ"
·ͱΊ • ཚܯ • ٖࣅཚͷྑ͠ѱ͠ • ϋʔυΣΞཚੜثͱ͍͏ਅͷཚΛ࡞ Δͷ͋Δ • ཚԞਂ͍ɺΈΜͳ৭ʑௐͯΈΔͱָ͍͠