2012-06-27 17 views
6

जब आपके पास Math.floor(Math.random()*10)+1 है तो मुझे समझ में आता है कि 1-10 के बीच यादृच्छिक संख्या चुननी चाहिए।Math.floor (Math.random()) +1 वास्तव में क्या करता है?

हालांकि, जब मैं +1 को किसी भी संख्या में उच्च या निम्न में बदलता हूं तो 1 मुझे एक ही परिणाम मिलता है। ऐसा क्यों है? +1 का अर्थ वास्तव में क्या है?

+2

आप की तुलना में अधिक कुछ जोड़ते हैं '1' और आप अभी भी 1-10 के बीच संख्याओं के साथ समाप्त हो गए हैं कुछ गलत है। –

+0

"वही परिणाम" से आपका क्या मतलब है? क्या आप कुछ आउटपुट स्पष्टीकरण या पोस्ट कर सकते हैं? –

+0

(स्पष्टीकरण के लिए - यदि आप * हमेशा * और * केवल * 1-10 के बीच संख्या प्राप्त करते हैं। जाहिर है कि कोई भी दिया गया रन केवल 1-10 उत्पन्न कर सकता है, लेकिन समय के साथ, यह लगभग निश्चित रूप से * नहीं होगा।) –

उत्तर

8

की एक अनुक्रमिक प्रगति देख सकते हैं यादृच्छिक संख्या जनरेटर 0.0 < = n < 1.0 की सीमा में एक मान उत्पन्न करता है। यदि आप 1 और कुछ के बीच कोई संख्या चाहते हैं तो आपको +1 ऑफ़सेट लागू करने की आवश्यकता होगी।

आम तौर पर आप का उपयोग कर सकते हैं:

Math.floor(Math.random() * N) + M 

यह एम और एम + एन के बीच मूल्यों उत्पन्न होगा - 1।

demo Fiddle

+3

पूरी तरह से सच नहीं है: 'Math.floor' के कारण यह एम और एम + एन -1 के बीच है। एम और एम + एन के बीच संख्या रखने के लिए आपको 'Math.round' की आवश्यकता है। हालांकि, उस स्थिति में विघटन बराबर नहीं है, क्योंकि एम और एम + एन में केवल रोल करने का आधा मौका है। – Christoph

+0

बस मज़े के लिए: http://jsfiddle.net/poikl/x5gSz/ – Christoph

+0

आप सही हैं। "बीच" से मेरा मतलब है "तक लेकिन इसमें शामिल नहीं है", जो तकनीकी रूप से एम <= n <एम + एन रेंज में मूल्यवान है। – tadman

3

Math.random(), 0 और 1.

इसलिए Math.random()*10 0 और 10, और (Math.random()*10)+1 के बीच एक यादृच्छिक संख्या एक नंबर 1 और के बीच 11.

Math.floor() इस संख्या के दशमलव चला जाता है उत्पन्न करता है के बीच एक यादृच्छिक संख्या उत्पन्न करता है और यह 10

0 से एक पूर्णांक बनाता है आप तर्क here

+4

'Math.random()' '0.9999 ... 'भी उत्पन्न कर सकता है। सटीक होने के लिए, 'Math.random()' 0 (और) को छोड़कर (0) (0) के बीच एक संख्या उत्पन्न करता है। –

+0

सत्यापित करने के लिए, मैंने 'Math.random()' चार बार भाग लिया। यह न केवल स्पष्ट रूप से दिखाता है कि '0.9' से ऊपर की एक फ्लोट प्राप्त की जा सकती है, लेकिन यह भी कि आप [यादृच्छिकता के बारे में कभी भी सुनिश्चित न करें] (http://dilbert.com/strips/comic/2001-10-25/): 0.9491507810734872/ 0.9815085749153463/ 0.7040373403047864/ 0.9940599762680827 –

+0

अच्छा बिंदु - तदनुसार अद्यतन उत्तर। और हाँ, लेकिन वास्तव में कुछ भी "यादृच्छिक" है! – jacktheripper

0

बेसिक:

(random() >= 0) हमेशा true

(random() < 1) हमेशा true

(Math.floor(random()) == 0) हमेशा true

अधिकतम:

(Math.floor(random() * 10) + 1 >= 1) हमेशा true

(Math.floor(random() * 10) + 1 < 11) हमेशा true

:

हमेशा true

(Math.floor(random() * 10) < 10) हमेशा true

न्यूनतम

मैक्स दौर:

हमेशा true

(Math.round(random() * 10, 0) <= 10)(Math.round(random() * 10, 0) >= 0) हमेशा true

2

पूरे नंबर 1 से 10

  • math.random() 0 और 1 (के बीच संख्या जनरेट करता है कई दशमलव स्थानों के साथ)।

आदि: math.random() [बेतरतीब ढंग से वापसी: .19157057767733932]

एक यादृच्छिक पूर्ण संख्या के लिए, आप यादृच्छिक गुणा करने की आवश्यकता (इस संख्या अभी भी कई दशमलव स्थानों होगा) 10

आदि
math.random() * द्वारा उत्पन्न संख्या 10 = [बेतरतीब ढंग से वापसी: 2.9757621488533914]

  • चूंकि संख्या में अभी भी कई दशमलव स्थान होंगे, इसलिए मंजिल() विधि का उपयोग एक संख्या नीचे/निकटतम पूर्णांक के लिए करने के लिए करें, यह 0 और 9 के बीच ua मान देगा। फिर, आप इसे संख्या बनाने के लिए 1 जोड़ सकते हैं 1 और 10 के बीच

आदि:
math.floor (0.6)   [वापसी 0]
math.floor (0,6) + 1   [वापसी 1]

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