2017-02-07 12 views
10

मैं निर्धारणात्मक उठा यादृच्छिक सामग्री के बारे में चालाक बनने की कोशिश कर रहा था, और यह पाया: एक पल के लिएरूबी में इस तरह यादृच्छिक काम क्यों करता है?

irb(main):011:0> Random.new(Random.new(1).rand + 1).rand == Random.new(1).rand 
=> true 
irb(main):012:0> Random.new(Random.new(5).rand + 1).rand == Random.new(5).rand 
=> false 
irb(main):013:0> Random.new(Random.new(5).rand + 5).rand == Random.new(5).rand 
=> true 

, मैंने सोचा था कि "वाह, हो सकता है कि यादृच्छिक संख्या जनरेटर का एक गुण है", लेकिन अजगर और सी # करने में विफल इसे पुन: उत्पन्न करें।

उत्तर

11

आप शायद इस से निराश होने जा रहे हैं। के rand के उत्पादन पर एक नज़र लेते हैं:

irb(main):001:0> Random.rand 
0.5739704645347423 

यह रेंज [0 एक संख्या है, 1)। Random.newपूर्णांक बीज स्वीकार करता है।

irb(main):002:0> Random.new(5.5) == Random.new(5) 
true 

रहस्य हल हो गया!

+0

ध्यान दें कि ओपी 'यादृच्छिक' उदाहरणों के बीच समानता का परीक्षण नहीं कर रहा है लेकिन फ्लोट के बीच। आपके स्पष्टीकरण IMHO में एक (छोटा) चरण गुम है। –

+0

@EricDuminil: समानता यह इंगित करना था कि उनके पास एक ही स्थिति है, इसलिए निश्चित रूप से वे एक ही यादृच्छिक संख्याएं उत्पन्न करेंगे। ('a.is_a' के लिए '= = b b'? यादृच्छिक' का अर्थ है 'a.rand == b.rand'।) – Ryan

+0

यह आपके लिए स्पष्ट हो सकता है, लेकिन ओपी या आपके उत्तर को पढ़ने वाले सभी को नहीं। 'रैंडम' समानता को परिभाषित करने के तरीके के लिए मुझे 'random.c' को देखना था। मेरा 2 सी $। –

संबंधित मुद्दे