क्या जावास्क्रिप्ट में एक निर्दिष्ट सीमा (जैसे 1 से 6: 1, 2, 3, 4, 5, या 6) में यादृच्छिक संख्या उत्पन्न करने का एक तरीका है?
Math.floor((Math.random()*10)+1);
आप के लिए w3schools.com/jsref/jsref_random.asp पर निर्दिष्ट नहीं कर सकता है ..?
क्या जावास्क्रिप्ट में एक निर्दिष्ट सीमा (जैसे 1 से 6: 1, 2, 3, 4, 5, या 6) में यादृच्छिक संख्या उत्पन्न करने का एक तरीका है?
Math.floor((Math.random()*10)+1);
आप के लिए w3schools.com/jsref/jsref_random.asp पर निर्दिष्ट नहीं कर सकता है ..?
जवाबों:
निम्न कोड केवल तभी काम करता है जब न्यूनतम मूल्य हो 1
। यह इसके अलावा न्यूनतम मूल्यों के लिए काम नहीं करता है 1
।
यदि आप 1 ( और केवल 1 ) और 6 के बीच एक यादृच्छिक पूर्णांक प्राप्त करना चाहते हैं , तो आप गणना करेंगे:
Math.floor(Math.random() * 6) + 1
कहाँ पे:
Math.floor(Math.random() * 6) + 2
इसका उपयोग करते हैं तो इसका मतलब है कि यदि Math.random()
0.99 में परिणाम हमारे यादृच्छिक मूल्य होंगे7
function randomIntFromInterval(min, max) { // min and max included
return Math.floor(Math.random() * (max - min + 1) + min);
}
यह "अतिरिक्त" क्या करता है यह यादृच्छिक अंतराल की अनुमति देता है जो 1 से शुरू नहीं होता है। इसलिए आप उदाहरण के लिए 10 से 15 तक यादृच्छिक संख्या प्राप्त कर सकते हैं। लचीलापन।
to
arg को शामिल नहीं करता है , तो from
arg अधिकतम के रूप में दोगुना हो जाता है
Returns a floating-point, pseudo-random number in the range [0, 1) that is, from 0 (inclusive) up to but not including 1 (exclusive), which you can then scale to your desired range.
( developer.mozilla.org/en-US/docs/JavaScript/Reference/… )
मिनट ( शामिल ) और अधिकतम ( शामिल ) के बीच एक पूर्णांक यादृच्छिक संख्या देता है :
function randomInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
या मिनट ( शामिल ) और अधिकतम ( शामिल नहीं ) के बीच कोई यादृच्छिक संख्या :
function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
उपयोगी उदाहरण (पूर्णांक):
// 0 -> 10
Math.floor(Math.random() * 11);
// 1 -> 10
Math.floor(Math.random() * 10) + 1;
// 5 -> 20
Math.floor(Math.random() * 16) + 5;
// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;
** और हमेशा याद दिलाया जाना अच्छा है (मोज़िला):
Math.random () क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या प्रदान नहीं करता है। सुरक्षा से संबंधित किसी भी चीज के लिए उनका उपयोग न करें। इसके बजाय वेब क्रिप्टो एपीआई का उपयोग करें, और अधिक सटीक रूप से window.crypto.getRandomValues () विधि।
[1,2]
, वहाँ 25% मौका है Math.random()
कि आप इन में से एक से एक नंबर देना होगा [0,0.49]
, [0.5,0.99]
, [1,1.49]
, [1.5,1.99]
। उन अंतरालों को गोल करने के परिणामस्वरूप 0, 1, 1, 2 होगा जो कि एक समान वितरण नहीं है। उन्हें फर्श पर रखने से 0, 0, 1, 1. में परिणाम होता है
Math.round
ओवर का उपयोग करने से Math.floor
अलग परिणाम क्यों मिलेगा।
function getRandomInt(min, max) { return Math.round((min - 0.5) + Math.random() * (max - min + 1)); }
a | 0
स्ट्रिंग को पूर्णांक में परिवर्तित करने का सबसे तेज़ और सबसे अनुकूलित तरीका भी है। यह केवल पूर्णांक ( "444"
और "-444"
) वाले स्ट्रिंग्स के साथ काम करता है , अर्थात कोई फ़्लोट्स / अंश नहीं। यह 0
हर चीज के लिए उपज देता है जो विफल हो जाती है। यह asm.js. के पीछे मुख्य अनुकूलन में से एक है
~~(Math.random() * (50000000000000 - 0 + 1)) + 0
औरMath.floor(Math.random() * (50000000000000 - 0 + 1)) + 0
टी एल; डॉ
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
यादृच्छिक संख्या प्राप्त करने के लिए
generateRandomInteger(-20, 20);
शोषण कम
हम एक यादृच्छिक पूर्णांक मिलता है, कहने की जरूरत है एक्स न्यूनतम और अधिकतम के बीच।
सही?
अर्थात मिनट <= एक्स <= अधिकतम
यदि हम समीकरण से न्यूनतम घटाते हैं, तो यह बराबर है
0 <= (एक्स - मिनट) <= (अधिकतम - मिनट)
अब, इसे एक यादृच्छिक संख्या r के साथ गुणा करने देता है जो है
0 <= (एक्स - मिनट) * आर <= (अधिकतम - मिनट) * आर
अब, समीकरण में वापस मिनट जोड़ने की सुविधा देता है
मिनट <= मिनट + (एक्स - मिनट) * आर <= मिनट + (अधिकतम - मिनट) * आर
अब, चलो एक समारोह चुना है, जिसमें परिणाम आर ऐसी है कि वह संतुष्ट के रूप में हमारे समीकरण रेंज [मिनट, अधिकतम]। यह तभी संभव है जब 0 <= r <= 1 हो
ठीक। अब, आर की सीमा अर्थात [0,1] गणित परिणाम () फ़ंक्शन के परिणाम के समान है। है ना?
Math.random () फ़ंक्शन एक फ्लोटिंग-पॉइंट, छद्म-यादृच्छिक संख्या को रेंज [0, 1) में लौटाता है; वह है, 0 से (समावेशी) तक लेकिन 1 (अनन्य) सहित नहीं
उदाहरण के लिए,
min
+ ० * ( max
- min
) = मि
min
+ 1 * ( max
- min
) = अधिकतम
min
+ r * ( max
- min
) = X , जहां X की न्यूनतम सीमा <= X <है अधिकतम है
उपरोक्त परिणाम X एक यादृच्छिक संख्या है। हालांकि Math.random () के कारण हमारी बाईं बाउंड समावेशी है, और दाईं बाउंड अनन्य है। अपने सही बाउंड को शामिल करने के लिए हम सही बाउंड को 1 से बढ़ाते हैं और परिणाम को फ्लोर करते हैं।
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
generateRandomInteger(-20, 20)
;
या, अंडरस्कोर में
_.random(min, max)
var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;
jsfiddle: https://jsfiddle.net/cyGwf/477/
रैंडम पूर्णांक : के बीच एक यादृच्छिक पूर्णांक प्राप्त करने के लिए min
और max
, निम्न कोड का उपयोग करें
function getRandomInteger(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
रैंडम फ्लोटिंग पॉइंट नंबर : के बीच एक रैंडम फ्लोटिंग पॉइंट नंबर पाने के लिए min
और max
, निम्न कोड का उपयोग करें
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
संदर्भ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
गणित मेरा मजबूत बिंदु नहीं है, लेकिन मैं एक ऐसी परियोजना पर काम कर रहा हूं, जहां मुझे सकारात्मक और नकारात्मक दोनों के बीच बहुत सारे यादृच्छिक संख्याएं उत्पन्न करने की आवश्यकता है।
function randomBetween(min, max) {
if (min < 0) {
return min + Math.random() * (Math.abs(min)+max);
}else {
return min + Math.random() * max;
}
}
उदाहरण के लिए
randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)
बेशक, आप यह सुनिश्चित करने के लिए कुछ सत्यापन भी जोड़ सकते हैं कि आप संख्याओं के अलावा किसी अन्य चीज़ के साथ ऐसा नहीं करते हैं। यह भी सुनिश्चित करें कि न्यूनतम हमेशा अधिकतम से कम या उसके बराबर हो।
min + Math.random() * max
आपको मिन और मिन + मैक्स के बीच नंबर देगा, जो कि आप नहीं चाहते हैं। की पहली शाखा if
सही है, लेकिन यह कहने के लिए सरलीकृत किया जा सकता है return min + Math.random() * (max - min)
, जो सही समाधान है चाहे वह सकारात्मक हो या नकारात्मक (अन्य उत्तर देखें)। इसके अलावा, ध्यान रखें कि यदि आप अंश नहीं चाहते हैं, तब भी आपको परिणाम को मंजिल करने की आवश्यकता है।
मैंने और अधिक लचीले फ़ंक्शन लिखे, जो आपको यादृच्छिक संख्या दे सकते हैं, लेकिन केवल पूर्णांक नहीं।
function rand(min,max,interval)
{
if (typeof(interval)==='undefined') interval = 1;
var r = Math.floor(Math.random()*(max-min+interval)/interval);
return r*interval+min;
}
var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0
निश्चित संस्करण।
उदाहरण
1 और 10 के बीच एक यादृच्छिक संख्या लौटाएँ:
Math.floor((Math.random() * 10) + 1);
परिणाम हो सकता है:
3
अपने आप को आज़माएँ: यहाँ
-
या लॉश / अंडरस्कोर का उपयोग करना:
_.random(min, max)
कई उत्तर और लगभग एक ही परिणाम के बावजूद। मैं अपने उत्तर को जोड़ना चाहूंगा और इसके काम को समझाऊंगा। क्योंकि एक पंक्ति कोड को कॉपी करने के बजाय इसके काम को समझना महत्वपूर्ण है। रैंडम नंबर जेनरेट करना सरल गणित के अलावा और कुछ नहीं है।
कोड:
function getR(lower, upper) {
var percent = (Math.random() * 100);
// this will return number between 0-99 because Math.random returns decimal number from 0-0.9929292 something like that
//now you have a percentage, use it find out the number between your INTERVAL :upper-lower
var num = ((percent * (upper - lower) / 100));
//num will now have a number that falls in your INTERVAL simple maths
num += lower;
//add lower to make it fall in your INTERVAL
//but num is still in decimal
//use Math.floor>downward to its nearest integer you won't get upper value ever
//use Math.ceil>upward to its nearest integer upper value is possible
//Math.round>to its nearest integer 2.4>2 2.5>3 both lower and upper value possible
console.log(Math.floor(num), Math.ceil(num), Math.round(num));
}
मैं टाइपस्क्रिप्ट में लिखे गए यादृच्छिक संख्या जनरेटर को खोज रहा था और मैंने सभी उत्तरों को पढ़ने के बाद लिखा है, आशा है कि यह टाइपस्क्रिप्ट कोडर्स के लिए काम करेगा।
Rand(min: number, max: number): number {
return (Math.random() * (max - min + 1) | 0) + min;
}
Math.random()
कई उद्देश्यों के लिए तेज़ और उपयुक्त है, लेकिन यह उचित नहीं है यदि आपको क्रिप्टोग्राफ़िक रूप से सुरक्षित मान (यह सुरक्षित नहीं है) की आवश्यकता है, या यदि आपको पूर्ण रूप से एक समान वितरण से पूर्णांक की आवश्यकता है (दूसरों के उत्तर में उपयोग किया जाने वाला गुणन दृष्टिकोण कुछ निश्चित मानों को अधिक बार पैदा करता है) दूसरों की तुलना में)।
ऐसे मामलों में, हम उपयोग कर सकते हैं crypto.getRandomValues()
सुरक्षित पूर्णांक उत्पन्न करने के लिए हैं, और किसी भी उत्पन्न मान को अस्वीकार कर सकते हैं जिसे हम समान रूप से लक्ष्य सीमा में मैप नहीं कर सकते हैं। यह धीमा होगा, लेकिन यह तब तक महत्वपूर्ण नहीं होना चाहिए जब तक आप बहुत बड़ी संख्या में मान उत्पन्न नहीं कर रहे हैं।
पक्षपाती वितरण चिंता को स्पष्ट करने के लिए, उस मामले पर विचार करें जहां हम 1 और 5 के बीच एक मान उत्पन्न करना चाहते हैं, लेकिन हमारे पास एक यादृच्छिक संख्या जनरेटर है जो 1 और 16 (4-बिट मान) के बीच मान पैदा करता है। हम प्रत्येक आउटपुट मान की मैपिंग के समान संख्याएँ प्राप्त करना चाहते हैं, लेकिन 16 समान रूप से 5 से विभाजित नहीं होता है: यह शेष 1. छोड़ता है, इसलिए हमें संभावित उत्पन्न मानों में से 1 को अस्वीकार करने की आवश्यकता है, और केवल तब प्राप्त होता है जब हम प्राप्त करते हैं 15 कम मानों में से एक जो हमारे लक्ष्य सीमा में समान रूप से मैप किया जा सकता है। हमारा व्यवहार इस प्रकार का दिख सकता है:
Generate a 4-bit integer in the range 1-16.
If we generated 1, 6, or 11 then output 1.
If we generated 2, 7, or 12 then output 2.
If we generated 3, 8, or 13 then output 3.
If we generated 4, 9, or 14 then output 4.
If we generated 5, 10, or 15 then output 5.
If we generated 16 then reject it and try again.
निम्न कोड समान तर्क का उपयोग करता है, लेकिन इसके बजाय 32-बिट पूर्णांक बनाता है, क्योंकि यह सबसे बड़ा सामान्य पूर्णांक आकार है जिसे जावास्क्रिप्ट के मानक number
प्रकार द्वारा दर्शाया जा सकता है । ( BigInt
यदि आपको एक बड़ी रेंज की आवश्यकता है, तो इसका उपयोग करने के लिए संशोधित किया जा सकता है ।) चुने हुए रेंज के बावजूद, अस्वीकार किए गए उत्पन्न मानों का अंश हमेशा 0.5 से कम होगा, इसलिए अस्वीकृति की अपेक्षित संख्या हमेशा 1.0 से कम होगी और आमतौर पर 0.0 के करीब; आपको इसके बारे में हमेशा चिंता करने की ज़रूरत नहीं है।
const randomInteger = (min, max) => {
const range = max - min;
const maxGeneratedValue = 0xFFFFFFFF;
const possibleResultValues = range + 1;
const possibleGeneratedValues = maxGeneratedValue + 1;
const remainder = possibleGeneratedValues % possibleResultValues;
const maxUnbiased = maxGeneratedValue - remainder;
if (!Number.isInteger(min) || !Number.isInteger(max) ||
max > Number.MAX_SAFE_INTEGER || min < Number.MIN_SAFE_INTEGER) {
throw new Error('Arguments must be safe integers.');
} else if (range > maxGeneratedValue) {
throw new Error(`Range of ${range} (from ${min} to ${max}) > ${maxGeneratedValue}.`);
} else if (max < min) {
throw new Error(`max (${max}) must be >= min (${min}).`);
} else if (min === max) {
return min;
}
let generated;
do {
generated = crypto.getRandomValues(new Uint32Array(1))[0];
} while (generated > maxUnbiased);
return min + (generated % possibleResultValues);
};
console.log(randomInteger(-8, 8)); // -2
console.log(randomInteger(0, 0)); // 0
console.log(randomInteger(0, 0xFFFFFFFF)); // 944450079
console.log(randomInteger(-1, 0xFFFFFFFF));
// Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(12).fill().map(n => randomInteger(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9]
@ फ्रांसिस के उत्तर में float
संस्करण के आधार पर निश्चित सटीक संस्करण के साथ जोड़ना int
:
function randomFloatFromInterval (min, max, fractionDigits) {
const fractionMultiplier = Math.pow(10, fractionDigits)
return Math.round(
(Math.random() * (max - min) + min) * fractionMultiplier,
) / fractionMultiplier
}
इसलिए:
randomFloatFromInterval(1,3,4) // => 2.2679, 1.509, 1.8863, 2.9741, ...
और int उत्तर के लिए
randomFloatFromInterval(1,3,0) // => 1, 2, 3
क्रिप्टो-मजबूत यादृच्छिक पूर्णांक संख्या रेंज में [ए, बी] (धारणा: ए <बी)
let rand= (a,b)=> a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
console.log( rand(1,6) );
यह लगभग नौ साल की देरी है, लेकिन randojs.com इसे एक सरल एक-लाइनर बनाता है:
rando(1, 6)
आपको बस इसे अपने HTML दस्तावेज़ के प्रमुख में जोड़ना होगा, और आप जो भी चाहें यादृच्छिकता के साथ आसानी से कर सकते हैं। सरणियों से यादृच्छिक मान, यादृच्छिक jquery तत्व, वस्तुओं से यादृच्छिक गुण और यहां तक कि आवश्यकता होने पर पुनरावृत्ति को रोकना।
<script src="https://randojs.com/1.0.0.js"></script>
यह मेरे लिए काम करता है और पायथन के random.randint मानक पुस्तकालय समारोह जैसे मूल्यों का उत्पादन करता है:
function randint(min, max) {
return Math.round((Math.random() * Math.abs(max - min)) + min);
}
console.log("Random integer: " + randint(-5, 5));
प्रयोग करके देखें:
function random(min, max) {
return Math.round((Math.random() *( Math.abs(max - min))) + min);
}
console.log(random(1, 6));