আমি কীভাবে জাভাস্ক্রিপ্টে দুটি নির্দিষ্ট ভেরিয়েবলের মধ্যে এলোমেলো পুরো সংখ্যা তৈরি করতে পারি, যেমন x = 4
এবং এর মধ্যে y = 8
কোনও আউটপুট দিতে পারে 4, 5, 6, 7, 8
?
আমি কীভাবে জাভাস্ক্রিপ্টে দুটি নির্দিষ্ট ভেরিয়েবলের মধ্যে এলোমেলো পুরো সংখ্যা তৈরি করতে পারি, যেমন x = 4
এবং এর মধ্যে y = 8
কোনও আউটপুট দিতে পারে 4, 5, 6, 7, 8
?
উত্তর:
মজিলা বিকাশকারী নেটওয়ার্ক পৃষ্ঠায় কয়েকটি উদাহরণ রয়েছে :
/**
* Returns a random number between min (inclusive) and max (exclusive)
*/
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
/**
* Returns a random integer between min (inclusive) and max (inclusive).
* The value is no lower than min (or the next integer greater than min
* if min isn't an integer) and no greater than max (or the next integer
* lower than max if max isn't an integer).
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
এর পিছনে যুক্তি এখানে। এটি তিনটির একটি সহজ নিয়ম:
Math.random()
একটি ফেরৎ Number
মধ্যে 0 (সমেত) এবং 1 (একচেটিয়া)। সুতরাং আমাদের এই মত একটি বিরতি আছে:
[0 .................................... 1)
এখন, আমরা min
(অন্তর্ভুক্ত) এবং max
(একচেটিয়া) মধ্যে একটি সংখ্যা চাই :
[0 .................................... 1)
[min .................................. max)
Math.random
[মিনিট, সর্বাধিক) ব্যবধানে সংবাদদাতা পেতে আমরা এটি ব্যবহার করতে পারি । তবে, প্রথমে আমাদের min
দ্বিতীয় বিরতি থেকে বিয়োগ করে কিছুটা সমস্যা তৈরি করা উচিত :
[0 .................................... 1)
[min - min ............................ max - min)
এটি দেয়:
[0 .................................... 1)
[0 .................................... max - min)
আমরা এখন আবেদন করতে পারি Math.random
এবং তারপরে সংবাদদাতাকে গণনা করতে পারি। আসুন একটি এলোমেলো সংখ্যা নির্বাচন করুন:
Math.random()
|
[0 .................................... 1)
[0 .................................... max - min)
|
x (what we need)
সুতরাং, সন্ধানের জন্য x
, আমরা এটি করব:
x = Math.random() * (max - min);
min
ফিরে যুক্ত করতে ভুলবেন না , যাতে আমরা [মিনিট, সর্বাধিক) ব্যবধানে একটি নম্বর পাই:
x = Math.random() * (max - min) + min;
এটি এমডিএন থেকে প্রথম কাজ ছিল। দ্বিতীয়টি , উভয় সমেত min
এবং এর মধ্যে একটি পূর্ণসংখ্যা প্রদান করে max
।
এখন পূর্ণসংখ্যা পাওয়ার জন্য আপনি ব্যবহার করতে পারেন round
, ceil
বা floor
।
আপনি ব্যবহার করতে পারেন Math.round(Math.random() * (max - min)) + min
, এটি তবে অ-সম-বিতরণ দেয়। উভয়ই, min
এবং max
কেবল রোল করার প্রায় অর্ধেক সুযোগ রয়েছে:
min...min+0.5...min+1...min+1.5 ... max-0.5....max
└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘ ← Math.round()
min min+1 max
max
অন্তর থেকে বাদ দিয়ে , এটির তুলনায় আরও কম সুযোগ রয়েছে min
।
আপনার সাথে Math.floor(Math.random() * (max - min +1)) + min
পুরোপুরি এমনকি বিতরণও রয়েছে।
min.... min+1... min+2 ... max-1... max.... max+1 (is excluded from interval)
| | | | | |
└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘ ← Math.floor()
min min+1 max-1 max
আপনি ব্যবহার করতে পারেন না ceil()
এবং -1
যার মধ্যে সমীকরণের কারণ max
এখন রোল করার জন্য একটি সামান্য কম সুযোগ ছিল, কিন্তু আপনি (অবাঞ্ছিত) রোল করতে min-1
খুব স্থাপিত।
floor
, যা গোল হয়।
round
, তবে উভয়ই, min
এবং max
অন্যান্য সংখ্যার মতোই রোল করার অর্ধেক সুযোগ ছিল। আপনি একটি সাবস্ট্রাক্ট এবং নিতে পারে ceil
। তবে ইন্টারভালের max
কারণে ন্যূনতম কম সুযোগ নিয়ে এই সংখ্যাটি ছেড়ে যায় [0,1)
।
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
(Math.random() * (maximum - minimum + 1) ) << 0
করা আরও দ্রুত।
x << 0
, x | 0
, ~~x
) এর পরিবর্তে Math.floor()
ধর্মান্তরিত x
তুলনায় অনেক ছোট পরিসর দুই সম্পূরক মধ্যে Number.MAX_SAFE_INTEGER
(2³²⁻¹ বনাম 2⁵³), এইভাবে আপনি সতর্কতার সাথে এটি ব্যবহার করতে হবে!
657348096152|0
218099864 (বাইনারি 1100111111111111000010011000) পান তবে।
সর্বনিম্ন ( অন্তর্ভুক্ত ) এবং সর্বাধিক ( অন্তর্ভুক্ত ) এর মধ্যে একটি পূর্ণসংখ্যার এলোমেলো নম্বর প্রদান করে :
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;
** এবং স্মরণ করিয়ে দেওয়া সর্বদা সুন্দর (মজিলা):
ম্যাথআর্যান্ডম () ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এলোমেলো সংখ্যা সরবরাহ করে না। সুরক্ষা সম্পর্কিত কোনও কিছুর জন্য এগুলি ব্যবহার করবেন না। পরিবর্তে ওয়েব ক্রিপ্টো এপিআই এবং আরও সুনির্দিষ্টভাবে উইন্ডো ক্রাইপ্টো.জেটআর্যান্ডমভ্যালু () পদ্ধতি ব্যবহার করুন।
function getRandomizer(bottom, top) {
return function() {
return Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom;
}
}
ব্যবহার:
var rollDie = getRandomizer( 1, 6 );
var results = ""
for ( var i = 0; i<1000; i++ ) {
results += rollDie() + " "; //make a string filled with 1000 random numbers in the range 1-6.
}
ভাঙ্গন:
আমরা একটি ফাংশন (ফাংশনাল প্রোগ্রামিং থেকে orrowণ নেওয়া) ফিরিয়ে দিচ্ছি যা যখন ডাকা হয় তখন মান bottom
এবং সমেতের মধ্যে একটি এলোমেলো পূর্ণসংখ্যা ফিরে আসবে top
। আমরা 'অন্তর্ভুক্তি' বলি কারণ আমরা ফিরে আসা যায় এমন সংখ্যার সীমাতে নীচ এবং উপরে উভয়কে অন্তর্ভুক্ত করতে চাই। এইভাবে, getRandomizer( 1, 6 )
1, 2, 3, 4, 5 বা 6 এর মধ্যে ফিরে আসবে।
(নীচের অংশটি কম নম্বর, শীর্ষটি বৃহত্তর সংখ্যা)
Math.random() * ( 1 + top - bottom )
Math.random()
0 এবং 1 এর মধ্যে একটি র্যান্ডম ডবল ফেরৎ, এবং আমরা সংখ্যাবৃদ্ধি এটা এক প্লাস মধ্যে পার্থক্য দ্বারা যদি top
এবং bottom
আমরা মধ্যে একটি ডবল কোথাও পাবেন 0
এবং 1+b-a
।
Math.floor( Math.random() * ( 1 + top - bottom ) )
Math.floor
সংখ্যাটি নিকটতম পূর্ণসংখ্যার দিকে গোল করে। সুতরাং আমাদের এখন 0
এবং এর মধ্যে সমস্ত পূর্ণসংখ্যা রয়েছে top-bottom
। 1 টি বিভ্রান্তিকর দেখাচ্ছে তবে এটি সেখানে থাকা দরকার কারণ আমরা সর্বদা গোল হয়ে থাকি, সুতরাং শীর্ষস্থানটি এটিকে ছাড়া কখনই পৌঁছানো যায় না। আমরা যে এলোমেলো দশমিক উত্পন্ন করি তার পরিসীমা থাকা 0
দরকার (1+top-bottom)
যাতে আমরা বৃত্তাকারটি পেতে পারি এবং এর সীমাটি 0
পেতে পারিtop-bottom
Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom
পূর্ববর্তী উদাহরণে কোড সীমার মধ্যে আমাদের একটি পূর্ণসংখ্যা দিলেন 0
এবং top-bottom
, তাই সব আমরা এখন যা করতে হবে যোগ bottom
যে ফলাফল সীমার মধ্যে একটি পূর্ণসংখ্যা পেতে bottom
এবং top
সমেত। : ডি
দ্রষ্টব্য: আপনি যদি অ-পূর্ণসংখ্যার মান বা বৃহত্তর সংখ্যায় প্রথম পাস করেন তবে আপনি অনাকাঙ্ক্ষিত আচরণ পাবেন, তবে কেউ যদি এটির আবেদন না করে আমি মূল প্রশ্নের উদ্দেশ্য থেকে দূরে হিসাবে তর্ক তদন্ত কোডটি প্রকাশ করতে যাচ্ছি না ।
function randomRange(min, max) {
return ~~(Math.random() * (max - min + 1)) + min
}
আপনি যদি ব্যবহার করতে পারেন অ্যান্ডস্কোর.জেএস ব্যবহার করছেন তবে বিকল্প
_.random(min, max)
_.uniqueId()
ফাংশন সরবরাহ করে যা আপনি ক্লায়েন্টের সাইড মডেলগুলির জন্য কল করতে পারেন।
x << 0
, x | 0
, ~~x
) এর পরিবর্তে Math.floor()
ধর্মান্তরিত x
তুলনায় অনেক ছোট পরিসর দুই সম্পূরক মধ্যে Number.MAX_SAFE_INTEGER
(2³²⁻¹ বনাম 2⁵³), এইভাবে আপনি সতর্কতার সাথে এটি ব্যবহার করতে হবে!
1 এবং 10 এর মধ্যে একটি এলোমেলো নম্বর ফিরিয়ে দিন:
Math.floor((Math.random()*10) + 1);
1 এবং 100 এর মধ্যে একটি এলোমেলো নম্বর ফিরিয়ে দিন:
Math.floor((Math.random()*100) + 1)
অন্যান্য উত্তর পুরোপুরি যুক্তিসঙ্গত পরামিতি হিসাব না 0
এবং 1
। এর পরিবর্তে আপনি ব্যবহার করা উচিত round
পরিবর্তে এর ceil
বা floor
:
function randomNumber(minimum, maximum){
return Math.round( Math.random() * (maximum - minimum) + minimum);
}
console.log(randomNumber(0,1)); # 0 1 1 0 1 0
console.log(randomNumber(5,6)); # 5 6 6 5 5 6
console.log(randomNumber(3,-1)); # 1 3 1 -1 -1 -1
console.log(randomNumber(5,6)); # 9 6 6 5 7 7
9 এবং 7 টি কি 5 এবং 6 এর মধ্যে আসে? ...... আপনার এটি সংশোধন করা উচিত বা ব্যাখ্যা করা উচিত ..
জাভাস্ক্রিপ্টে এলোমেলো ক্লাসের এমএস ডটনেট বাস্তবায়ন-
var Random = (function () {
function Random(Seed) {
if (!Seed) {
Seed = this.milliseconds();
}
this.SeedArray = [];
for (var i = 0; i < 56; i++)
this.SeedArray.push(0);
var num = (Seed == -2147483648) ? 2147483647 : Math.abs(Seed);
var num2 = 161803398 - num;
this.SeedArray[55] = num2;
var num3 = 1;
for (var i_1 = 1; i_1 < 55; i_1++) {
var num4 = 21 * i_1 % 55;
this.SeedArray[num4] = num3;
num3 = num2 - num3;
if (num3 < 0) {
num3 += 2147483647;
}
num2 = this.SeedArray[num4];
}
for (var j = 1; j < 5; j++) {
for (var k = 1; k < 56; k++) {
this.SeedArray[k] -= this.SeedArray[1 + (k + 30) % 55];
if (this.SeedArray[k] < 0) {
this.SeedArray[k] += 2147483647;
}
}
}
this.inext = 0;
this.inextp = 21;
Seed = 1;
}
Random.prototype.milliseconds = function () {
var str = new Date().valueOf().toString();
return parseInt(str.substr(str.length - 6));
};
Random.prototype.InternalSample = function () {
var num = this.inext;
var num2 = this.inextp;
if (++num >= 56) {
num = 1;
}
if (++num2 >= 56) {
num2 = 1;
}
var num3 = this.SeedArray[num] - this.SeedArray[num2];
if (num3 == 2147483647) {
num3--;
}
if (num3 < 0) {
num3 += 2147483647;
}
this.SeedArray[num] = num3;
this.inext = num;
this.inextp = num2;
return num3;
};
Random.prototype.Sample = function () {
return this.InternalSample() * 4.6566128752457969E-10;
};
Random.prototype.GetSampleForLargeRange = function () {
var num = this.InternalSample();
var flag = this.InternalSample() % 2 == 0;
if (flag) {
num = -num;
}
var num2 = num;
num2 += 2147483646.0;
return num2 / 4294967293.0;
};
Random.prototype.Next = function (minValue, maxValue) {
if (!minValue && !maxValue)
return this.InternalSample();
var num = maxValue - minValue;
if (num <= 2147483647) {
return parseInt((this.Sample() * num + minValue).toFixed(0));
}
return this.GetSampleForLargeRange() * num + minValue;
};
Random.prototype.NextDouble = function () {
return this.Sample();
};
Random.prototype.NextBytes = function (buffer) {
for (var i = 0; i < buffer.length; i++) {
buffer[i] = this.InternalSample() % 256;
}
};
return Random;
}());
ব্যবহার করুন:
var r = new Random();
var nextInt = r.Next(1, 100); //returns an integer between range
var nextDbl = r.NextDouble(); //returns a random decimal
প্রদত্ত ব্যাপ্তির মধ্যে এলোমেলো সংখ্যা পেতে এই ফাংশনটি ব্যবহার করুন
function rnd(min,max){
return Math.floor(Math.random()*(max-min+1)+min );
}
একটি কম্পিউটার প্রোগ্রাম ব্যবহার করে একটি এলোমেলো সংখ্যা তৈরির পরে, এটি এখনও একটি এলোমেলো সংখ্যা হিসাবে বিবেচনা করা হয় যদি বাছাই করা নম্বরটি কোনও অংশ বা প্রাথমিক একটির পূর্ণ নম্বর হয় full তবে যদি এটি পরিবর্তন করা হয়, তবে গণিতবিদগণ এটিকে এলোমেলো সংখ্যা হিসাবে গ্রহণ করবেন না এবং তারা এটিকে পক্ষপাতদুষ্ট নম্বর বলতে পারেন। তবে আপনি যদি কোনও সাধারণ কাজের জন্য কোনও প্রোগ্রাম বিকাশ করে থাকেন তবে এটি বিবেচনা করার মতো বিষয় হবে না। তবে আপনি যদি লটারি প্রোগ্রাম, বা জুয়া গেমের মতো মূল্যবান স্টাফের জন্য এলোমেলো সংখ্যা তৈরির জন্য কোনও প্রোগ্রাম বিকাশ করছেন তবে উপরোক্ত বিষয়ে আপনার যদি বিবেচনা না করা হয় তবে আপনার প্রোগ্রামটি ম্যানেজমেন্ট কর্তৃক প্রত্যাখ্যাত হবে।
সুতরাং এই ধরণের লোকের জন্য, আমার পরামর্শটি এখানে:
ব্যবহার করে একটি এলোমেলো সংখ্যা তৈরি করুন Math.random()
this (এটি বলুন n
)
Now for [0,10) ==> n*10 (i.e. one digit) and for[10,100) ==> n*100 (i.e. two digits) and so on. Here squire bracket indicates that boundary is inclusive and round bracket indicates boundary is exclusive.
Then remove the rest after the decimal point. (i.e. get floor) - using Math.floor(), this can be done.
যদি আপনি কীভাবে এলোমেলো নম্বর বাছাই করতে র্যান্ডম নম্বর টেবিলটি পড়তে জানেন তবে আপনি জানেন যে উপরের প্রক্রিয়াটি (1, 10, 100 এবং আরও অনেকগুলি দ্বারা গুণ করা) আমার শুরুতে উল্লিখিত একটিটিকে লঙ্ঘন করে না Because (কারণ এটি কেবলমাত্র পরিবর্তন করে দশমিক বিন্দুর স্থান।)
নিম্নলিখিত উদাহরণ অধ্যয়ন করুন এবং এটি আপনার প্রয়োজন বিকাশ।
আপনার যদি একটি নমুনা প্রয়োজন [0,9] তবে n * 10 এর তল আপনার উত্তর এবং যদি [0,99] প্রয়োজন হয় তবে এন * 100 এর তল আপনার উত্তর এবং তাই on
এখন আপনার ভূমিকা প্রবেশ করতে দিন:
আপনি নির্দিষ্ট ব্যাপ্তির মধ্যে নম্বর জিজ্ঞাসা করেছেন। (এক্ষেত্রে আপনি সেই পরিসরের মধ্যে পক্ষপাতদুষ্ট। - [১,6] থেকে একটি ডাই রোল লিখে একটি সংখ্যা নিলে আপনি পক্ষপাতদুষ্ট হন [১,6] তবে তবুও এটি এলোমেলোভাবে হয় এবং যদি কেবল মরা পক্ষপাতহীন হয় তবে ।)
সুতরাং আপনার পরিসীমা বিবেচনা করুন ==> [24 78, ২77] পরিসরের উপাদানগুলির সংখ্যা = 247 - 78 + 1 = 170; (যেহেতু উভয় সীমানা অন্তর্ভুক্ত)।
/*Mthod 1:*/
var i = 78, j = 247, k = 170, a = [], b = [], c, d, e, f, l = 0;
for(; i <= j; i++){ a.push(i); }
while(l < 170){
c = Math.random()*100; c = Math.floor(c);
d = Math.random()*100; d = Math.floor(d);
b.push(a[c]); e = c + d;
if((b.length != k) && (e < k)){ b.push(a[e]); }
l = b.length;
}
console.log('Method 1:');
console.log(b);
/*Method 2:*/
var a, b, c, d = [], l = 0;
while(l < 170){
a = Math.random()*100; a = Math.floor(a);
b = Math.random()*100; b = Math.floor(b);
c = a + b;
if(c <= 247 || c >= 78){ d.push(c); }else{ d.push(a); }
l = d.length;
}
console.log('Method 2:');
console.log(d);
দ্রষ্টব্য: প্রথম এক পদ্ধতিতে, আমি প্রথমে একটি অ্যারে তৈরি করেছি যার মধ্যে আপনার প্রয়োজনীয় সংখ্যাগুলি রয়েছে এবং তারপরে এলোমেলোভাবে এগুলিকে অন্য অ্যারেতে রেখেছি। দ্বিতীয় পদ্ধতিতে, এলোমেলোভাবে সংখ্যা উত্পন্ন করুন এবং আপনার প্রয়োজনীয় পরিসরটিতে এটি পরীক্ষা করুন। তারপরে এটি একটি অ্যারেতে রাখুন। এখানে আমি দুটি এলোমেলো সংখ্যা উত্পন্ন করেছিলাম এবং তাদের মোট ব্যবহার করে ব্যর্থতার হার হ্রাস করে একটি কার্যকর নম্বর প্রাপ্তির মাধ্যমে প্রোগ্রামের গতি সর্বাধিক করতে। তবে উত্পন্ন সংখ্যা যুক্ত করা কিছুটা পক্ষপাতিত্বও দেবে। সুতরাং আমি একটি নির্দিষ্ট পরিসরের মধ্যে এলোমেলো সংখ্যা উত্পন্ন করার জন্য আমার প্রথম পদ্ধতির সুপারিশ করব।
উভয় পদ্ধতিতে, আপনার কনসোল ফলাফলটি প্রদর্শন করবে ((কনসোল খোলার জন্য Chrome এ f12 টিপুন)
Math.floor(Math.random() * (6 - 1 + 1) + 1)
] 1 এবং 6 সংখ্যাটি অগত্যা 2, 3, 4 এবং 5 এর চেয়ে কম গুণিত হবে However তবে, পার্থক্যটি মূলত তুচ্ছ।
একটি ব্যাপ্তির সাথে এলোমেলো পূর্ণসংখ্যার জন্য চেষ্টা করুন:
function random(minimum, maximum) {
var bool = true;
while (bool) {
var number = (Math.floor(Math.random() * maximum + 1) + minimum);
if (number > 20) {
bool = true;
} else {
bool = false;
}
}
return number;
}
function getRandomInt(lower, upper)
{
//to create an even sample distribution
return Math.floor(lower + (Math.random() * (upper - lower + 1)));
//to produce an uneven sample distribution
//return Math.round(lower + (Math.random() * (upper - lower)));
//to exclude the max value from the possible values
//return Math.floor(lower + (Math.random() * (upper - lower)));
}
এই ফাংশনটি এবং এই ফাংশনের বিভিন্নতা পরীক্ষা করতে নীচের HTML / জাভাস্ক্রিপ্টটিকে একটি ফাইলে সংরক্ষণ করুন এবং একটি ব্রাউজার দিয়ে খুলুন with কোডটি দশ লক্ষ ফাংশন কল বিতরণ দেখিয়ে একটি গ্রাফ তৈরি করবে । কোডটি প্রান্তের কেসগুলিও রেকর্ড করবে, সুতরাং যদি ফাংশনটি সর্বাধিকের চেয়ে বেশি বা কমপক্ষে তার চেয়ে কম মান উৎপন্ন করে, আপনি.will.know.about.it।
<html>
<head>
<script type="text/javascript">
function getRandomInt(lower, upper)
{
//to create an even sample distribution
return Math.floor(lower + (Math.random() * (upper - lower + 1)));
//to produce an uneven sample distribution
//return Math.round(lower + (Math.random() * (upper - lower)));
//to exclude the max value from the possible values
//return Math.floor(lower + (Math.random() * (upper - lower)));
}
var min = -5;
var max = 5;
var array = new Array();
for(var i = 0; i <= (max - min) + 2; i++) {
array.push(0);
}
for(var i = 0; i < 1000000; i++) {
var random = getRandomInt(min, max);
array[random - min + 1]++;
}
var maxSample = 0;
for(var i = 0; i < max - min; i++) {
maxSample = Math.max(maxSample, array[i]);
}
//create a bar graph to show the sample distribution
var maxHeight = 500;
for(var i = 0; i <= (max - min) + 2; i++) {
var sampleHeight = (array[i]/maxSample) * maxHeight;
document.write('<span style="display:inline-block;color:'+(sampleHeight == 0 ? 'black' : 'white')+';background-color:black;height:'+sampleHeight+'px"> [' + (i + min - 1) + ']: '+array[i]+'</span> ');
}
document.write('<hr/>');
</script>
</head>
<body>
</body>
</html>
1 থেকে 6 এর মধ্যে একটি এলোমেলো নম্বর পেতে প্রথমে করুন:
0.5 + (Math.random() * ((6 - 1) + 1))
এটি একটি এলোমেলো সংখ্যাটি 6 দ্বারা গুণ করে এবং তারপরে এটিতে 0.5 টি যোগ করে। এর পরে নম্বরটি ইতিবাচক পূর্ণসংখ্যায় করে:
Math.round(0.5 + (Math.random() * ((6 - 1) + 1))
এই সংখ্যাটি নিকটতম পুরো সংখ্যায় গোল করে।
বা আরও বোধগম্য করতে এটি করুন:
var value = 0.5 + (Math.random() * ((6 - 1) + 1))
var roll = Math.round(value);
return roll;
সাধারণত ভেরিয়েবল ব্যবহার করে এটি করার কোডটি হ'ল:
var value = (Min - 0.5) + (Math.random() * ((Max - Min) + 1))
var roll = Math.round(value);
return roll;
সর্বনিম্ন মান থেকে 0.5 কেড়ে নেওয়ার কারণ হ'ল একমাত্র ন্যূনতম মান ব্যবহার করা আপনাকে এমন একটি পূর্ণসংখ্যা পেতে দেয় যা আপনার সর্বাধিক মানের চেয়ে আরও বেশি। ন্যূনতম মান থেকে ০.০ কেড়ে নিয়ে আপনি মূলত সর্বোচ্চ মানটিকে বৃত্তাকার থেকে আটকাচ্ছেন।
আশা করি এইটি কাজ করবে.
নিম্নলিখিত কোড ব্যবহার করে আপনি প্রদত্ত পরিসরে পুনরাবৃত্তি না করে এলোমেলো সংখ্যার অ্যারে তৈরি করতে পারবেন।
function genRandomNumber(how_many_number,min,max) {
// parameters
// how_many_number : how many numbers you want to generate. For example it is 5.
// min(inclusive) : minimum/low value of a range. it must be any positive integer but less than max. i.e 4
// max(inclusive) : maximun value of a range. it must be any positive integer. i.e 50
// return type: array
var random_number = [];
for (var i = 0; i < how_many_number; i++) {
var gen_num = parseInt((Math.random() * (max-min+1)) + min);
do {
var is_exist = random_number.indexOf(gen_num);
if (is_exist >= 0) {
gen_num = parseInt((Math.random() * (max-min+1)) + min);
}
else {
random_number.push(gen_num);
is_exist = -2;
}
}
while (is_exist > -1);
}
document.getElementById('box').innerHTML = random_number;
}
আমি জানি এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে তবে আমার উত্তরটি কাউকে সহায়তা করতে পারে।
আমি ডাব্লু 3 স্কুলগুলিতে এই সহজ পদ্ধতিটি পেয়েছি:
Math.floor((Math.random() * max) + min);
আশা করি এটি কারও সাহায্য করবে।
সর্বনিম্ন এবং সর্বোচ্চের মধ্যে এলোমেলো পুরো সংখ্যা:
function randomRange(l,h){
var range = (h-l);
var random = Math.floor(Math.random()*range);
if (random === 0){random+=1;}
return l+random;
}
সর্বাধিক মার্জিত সমাধান নয় .. তবে দ্রুত কিছু।
আমি এলোমেলো সংখ্যা উত্পন্ন করতে যা ব্যবহার করি তা এখানে।
function random(high,low) {
high++;
return Math.floor((Math.random())*(high-low))+low;
}
আমরা এক্সিকিউট করি high++
কারণ Math.random()
0, (সমেত) এবং 1 (একচেটিয়া) এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করে, যার অর্থ একটি বাদ পড়েছে, তার অর্থ কোনও গণিতের সম্পাদন করার আগে আমাদের অবশ্যই উচ্চ বৃদ্ধি করতে হবে। তারপরে আমরা উচ্চ থেকে নিম্ন বিয়োগ করি, আমাদের তৈরি করতে সর্বাধিক সংখ্যা প্রদান করি - নিম্ন, তারপরে + কম, উচ্চকে স্বাভাবিক অবস্থায় ফিরিয়ে আনা এবং সর্বনিম্ন সংখ্যাটি সর্বনিম্ন নিম্নে পরিণত করি। তারপরে আমরা ফলাফলটি ফিরে পাই
random(7,3)
ফিরে আসতে পারে 3,4,5,6, or 7
high
কেবল একবার ব্যবহৃত হয়, আপনি high-low+1
পৃথক বর্ধিত বিবৃতি না দিয়ে ব্যবহার করতে পারেন । এছাড়াও, বেশিরভাগ ব্যবহারকারীরা low
প্যারামিটারটি আগে আসবে বলে আশা করবে ।
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script>
/*
assuming that window.crypto.getRandomValues is available
the real range would be fron 0 to 1,998 instead of 0 to 2,000
See javascript documentation for explanation
https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues
*/
var array = new Uint8Array(2);
window.crypto.getRandomValues(array);
console.log(array[0] + array[1]);
</script>
</body>
</html>
Uint8Array 3 টি সংখ্যা পর্যন্ত একটি সংখ্যায় পূর্ণ অ্যারে তৈরি করুন যা সর্বোচ্চ 999 হবে be এই কোডটি খুব সংক্ষিপ্ত।
এখানে জাভাস্ক্রিপ্ট ফাংশনের একটি উদাহরণ যা ম্যাথ.র্যান্ডম () ব্যবহার না করে কোনও নির্দিষ্ট দৈর্ঘ্যের এলোমেলো সংখ্যা তৈরি করতে পারে :
function genRandom(length)
{
const t1 = new Date().getMilliseconds();
var min = "1",max = "9";
var result;
var numLength = length;
if (numLength != 0)
{
for (var i = 1; i < numLength; i++)
{
min = min.toString() + "0";
max = max.toString() + "9";
}
}
else
{
min = 0;
max = 0;
return;
}
for (var i = min; i <= max; i++)
{
//Empty Loop
}
const t2 = new Date().getMilliseconds();
console.log(t2);
result = ((max - min)*t1)/t2;
console.log(result);
return result;
}
এটি একটি পরিসরে একটি এলোমেলো সংখ্যার প্রতি আমার গ্রহণ, যেমনটি আমি বেজায় বেজ থেকে বেঁধে একটি সীমার মধ্যে একটি র্যান্ডম নম্বর পেতে চেয়েছিলাম। উদাহরণস্বরূপ বেস = 10, সূচক = 2, 0 থেকে 100 পর্যন্ত আদর্শ, এবং আরও অনেকগুলি এলোমেলো সংখ্যা দেয়।
যদি এটি এটি ব্যবহার করতে সহায়তা করে তবে এটি এখানে:
// get random number within provided base + exponent
// by Goran Biljetina --> 2012
function isEmpty(value){
return (typeof value === "undefined" || value === null);
}
var numSeq = new Array();
function add(num,seq){
var toAdd = new Object();
toAdd.num = num;
toAdd.seq = seq;
numSeq[numSeq.length] = toAdd;
}
function fillNumSeq (num,seq){
var n;
for(i=0;i<=seq;i++){
n = Math.pow(num,i);
add(n,i);
}
}
function getRandNum(base,exp){
if (isEmpty(base)){
console.log("Specify value for base parameter");
}
if (isEmpty(exp)){
console.log("Specify value for exponent parameter");
}
fillNumSeq(base,exp);
var emax;
var eseq;
var nseed;
var nspan;
emax = (numSeq.length);
eseq = Math.floor(Math.random()*emax)+1;
nseed = numSeq[eseq].num;
nspan = Math.floor((Math.random())*(Math.random()*nseed))+1;
return Math.floor(Math.random()*nspan)+1;
}
console.log(getRandNum(10,20),numSeq);
//testing:
//getRandNum(-10,20);
//console.log(getRandNum(-10,20),numSeq);
//console.log(numSeq);
Math.random()
অনেক উদ্দেশ্যে দ্রুত এবং উপযুক্ত, তবে আপনার যদি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত মানগুলি (এটি সুরক্ষিত নয়) প্রয়োজন হয় তবে এটি উপযুক্ত নয় বা যদি আপনার সম্পূর্ণ ইউনিফর্ম নিরপেক্ষ বিতরণ থেকে পূর্ণসংখ্যার প্রয়োজন হয় (অন্যের উত্তরগুলিতে ব্যবহৃত গুণগুলি কিছু নির্দিষ্ট ক্ষেত্রে আরও কিছু বার উত্পাদন করে অন্যদের তুলনায়).
যেমন ক্ষেত্রে, আমরা ব্যবহার করতে পারেন crypto.getRandomValues()
পূর্ণসংখ্যার উত্পাদন করতে , এবং যে উত্পন্ন মানগুলি আমরা লক্ষ্য সীমার মধ্যে অভিন্ন মানচিত্র করতে পারি না তা প্রত্যাখ্যান করতে পারি। এটি ধীর হবে তবে আপনি যদি প্রচুর পরিমাণে মান উৎপন্ন না করেন তবে তা তাত্পর্যপূর্ণ হওয়া উচিত না।
পক্ষপাতদুষ্ট বিতরণের উদ্বেগকে স্পষ্ট করার জন্য, আমরা কেসটি বিবেচনা করি যেখানে আমরা 1 থেকে 5 এর মধ্যে একটি মান তৈরি করতে চাই তবে আমাদের কাছে একটি এলোমেলো সংখ্যা জেনারেটর রয়েছে যা 1 থেকে 16 এর মধ্যে মান তৈরি করে (একটি 4-বিট মান)। আমরা প্রতিটি আউটপুট মানকে একই সংখ্যক উত্পন্ন মানগুলি ম্যাপিং করতে চাই, তবে ১ 16 টি সমানভাবে ৫ দ্বারা বিভাজন করে না: এটি ১ এর অবশিষ্টাংশ ছেড়ে যায়, সুতরাং আমাদের সম্ভাব্য উত্পন্ন মানগুলির 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
আপনার যদি আরও বৃহত্তর পরিসরের প্রয়োজন হয় তবে এটি ব্যবহারের জন্য এটি সংশোধন করা যেতে পারে the) নির্বাচিত পরিসরটি নির্বিশেষে, উত্পন্ন মানগুলির ভগ্নাংশ সর্বদা ০.৫ এর কম হবে, সুতরাং প্রত্যাশার প্রত্যাশিত সংখ্যা সর্বদা ১.০ এর কম হবে এবং সাধারণত 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]
রাগনে ক্রিপ্টো-শক্তিশালী র্যান্ডম পূর্ণসংখ্যার নম্বর পেতে [x, y] চেষ্টা করুন
let cr= (x,y)=>x+(y-x+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
console.log(cr(4,8))
আপনি এই কোড স্নিপেট করতে পারেন,
let randomNumber = function(first,second){
let number = Math.floor(Math.random()*Math.floor(second));
while(number<first){
number = Math.floor(Math.random()*Math.floor(second));
}
return number;
}
do - while
পরিবর্তে কেবল ব্যবহার করুনwhile
আয়নু জি স্টান একটি দুর্দান্ত উত্তর লিখেছিলেন তবে তা বুঝতে আমার পক্ষে কিছুটা জটিল ছিল। সুতরাং, আমি https://teamtreehouse.com/commune/mathfloor-mathrandom-max-min-1-min-explanation এ একই ধারণার আরও সহজ ব্যাখ্যা পেয়েছি জেসন অ্যানেলোর দ্বারা ।
দ্রষ্টব্য: জেসনের ব্যাখ্যা পড়ার আগে আপনার জেনে রাখা উচিত কেবলমাত্র গুরুত্বপূর্ণ বিষয়টি হ'ল "কাটা কাটা" সংজ্ঞা। বর্ণনার সময় তিনি সেই শব্দটি ব্যবহার করেন Math.floor()
। অক্সফোর্ড অভিধান "ট্র্যাঙ্কেট" সংজ্ঞায়িত করেছেন:
শীর্ষ বা প্রান্তটি কেটে ছোট করে (কিছু)।
এটি 20 ডিজিটের ইউনিক্যু এলোমেলো নম্বর পর্যন্ত উত্পাদন পরিচালনা করতে পারে
জাতীয়
var generatedNumbers = [];
function generateRandomNumber(precision) { // precision --> number precision in integer
if (precision <= 20) {
var randomNum = Math.round(Math.random().toFixed(precision) * Math.pow(10, precision));
if (generatedNumbers.indexOf(randomNum) > -1) {
if (generatedNumbers.length == Math.pow(10, precision))
return "Generated all values with this precision";
return generateRandomNumber(precision);
} else {
generatedNumbers.push(randomNum);
return randomNum;
}
} else
return "Number Precision shoould not exceed 20";
}
generateRandomNumber(1);
/ * এমন একটি ফাংশন লিখুন randUpTo
যা একটি সংখ্যা গ্রহণ করে এবং 0 এবং সেই সংখ্যার মধ্যে একটি এলোমেলো পুরো সংখ্যাটি দেয়? * /
var randUpTo = function(num) {
return Math.floor(Math.random() * (num - 1) + 0);
};
/ * এমন একটি ফাংশন লিখুন randBetween
যা একটি পরিসীমা প্রতিনিধিত্ব করে এমন দুটি সংখ্যা গ্রহণ করে এবং এই দুটি সংখ্যার মধ্যে একটি এলোমেলো পুরো সংখ্যা প্রদান করে। * /
var randBetween = function (min, max) {
return Math.floor(Math.random() * (max - min - 1)) + min;
};
/ * এমন একটি ফাংশন লিখুন randFromTill
যা একটি পরিসীমা প্রতিনিধিত্ব করে এমন দুটি সংখ্যা গ্রহণ করে এবং মিনিট (অন্তর্ভুক্ত) এবং সর্বোচ্চ (একচেটিয়া) এর মধ্যে একটি এলোমেলো সংখ্যা প্রদান করে। * /
var randFromTill = function (min, max) {
return Math.random() * (max - min) + min;
};
/ * এমন একটি ফাংশন লিখুন randFromTo
যা একটি পরিসীমা প্রতিনিধিত্ব করে এমন দুটি সংখ্যা গ্রহণ করে এবং ন্যূনতম (অন্তর্ভুক্ত) এবং সর্বাধিক (অন্তর্ভুক্ত) এর মধ্যে একটি এলোমেলো পূর্ণসংখ্যা ফেরত দেয় * /
var randFromTo = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
আমি এই ফাংশনটি তৈরি করেছি যা নূন্যতম, সর্বাধিক, বাদ দেওয়া (বাদ দেওয়ার জন্য অন্তরের একটি তালিকা) এবং বীজ (যদি আপনি বীজযুক্ত এলোমেলো জেনারেটর চান) account
get_random_int = function(args={})
{
let def_args =
{
min: 0,
max: 1,
exclude: false,
seed: Math.random
}
args = Object.assign(def_args, args)
let num = Math.floor(args.seed() * (args.max - args.min + 1) + args.min)
if(args.exclude)
{
let diff = args.max - args.min
let n = num
for(let i=0; i<diff*2; i++)
{
if(args.exclude.includes(n))
{
if(n + 1 <= args.max)
{
n += 1
}
else
{
n = args.min
}
}
else
{
num = n
break
}
}
}
return num
}
এটি এর মতো ব্যবহার করা যেতে পারে:
let n = get_random_int
(
{
min: 0,
max: some_list.length - 1,
exclude: [3, 6, 5],
seed: my_seed_function
}
)
বা আরও সহজভাবে:
let n = get_random_int
(
{
min: 0,
max: some_list.length - 1
}
)
তারপরে আপনি এটি করতে পারেন:
let item = some_list[n]
সংক্ষিপ্তসার: https://gist.github.com/madplines/757deb000bdec25776d5036dae58ee6e
ম্যাথ.ফ্লুর একটি সংখ্যাকে প্রায় নিকটতম পূর্ণসংখ্যার দিকে নিয়ে যায়
function generateRandomInteger (min, max) {
return Math.floor(random(min,max))
}`
সুতরাং 4 এবং 8 সমেতের মধ্যে একটি এলোমেলো পূর্ণসংখ্যার উত্পাদন করতে নিম্নলিখিত যুক্তি দিয়ে উপরের ফাংশনটি কল করুন:
generateRandomInteger (4,9)
0 এবং n এর মধ্যে এলোমেলো সংখ্যা তৈরি করার আমার পদ্ধতি, যেখানে এন <= 10 (এন বাদ)
Math.floor((Math.random() * 10) % n)