জাভাস্ক্রিপ্টে একটি নির্দিষ্ট পরিসরে (যেমন 1 থেকে 6: 1, 2, 3, 4, 5, বা 6) এলোমেলো সংখ্যা তৈরি করার কোনও উপায় আছে কি?
Math.floor((Math.random()*10)+1);
এ এখানে উল্লিখিত হিসাবে এর মতো সমাধান আপনার পক্ষে কাজ করতে পারে না কেন ..?
জাভাস্ক্রিপ্টে একটি নির্দিষ্ট পরিসরে (যেমন 1 থেকে 6: 1, 2, 3, 4, 5, বা 6) এলোমেলো সংখ্যা তৈরি করার কোনও উপায় আছে কি?
Math.floor((Math.random()*10)+1);
এ এখানে উল্লিখিত হিসাবে এর মতো সমাধান আপনার পক্ষে কাজ করতে পারে না কেন ..?
উত্তর:
নিম্নলিখিত কোডটি কেবলমাত্র সর্বনিম্ন মান হলে কাজ করে 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
আর্গকে অন্তর্ভুক্ত না করে তবে from
আর্গ সর্বাধিক হিসাবে দ্বিগুণ হয়
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.
( ডেভেলপার.মোজিলা.আর.ইন-
সর্বনিম্ন ( অন্তর্ভুক্ত ) এবং সর্বাধিক ( অন্তর্ভুক্ত ) এর মধ্যে একটি পূর্ণসংখ্যার এলোমেলো নম্বর প্রদান করে :
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;
** এবং স্মরণ করিয়ে দেওয়া সর্বদা সুন্দর (মজিলা):
ম্যাথআর্যান্ডম () ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এলোমেলো সংখ্যা সরবরাহ করে না। সুরক্ষা সম্পর্কিত কোনও কিছুর জন্য এগুলি ব্যবহার করবেন না। পরিবর্তে ওয়েব ক্রিপ্টো এপিআই এবং আরও সুনির্দিষ্টভাবে উইন্ডো ক্রাইপ্টো.জেটআর্যান্ডমভ্যালু () পদ্ধতি ব্যবহার করুন।
[1,2]
, সেখানে 25% সুযোগ Math.random()
এইসব এক থেকে একটি সংখ্যা দিতে হবে [0,0.49]
, [0.5,0.99]
, [1,1.49]
, [1.5,1.99]
। এই ব্যবধানগুলিকে গোল করার ফলে 0, 1, 1, 2 দেখা যায় যা এমনকি কোনও বিতরণ নয়। তাদের
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. এর পিছনে অন্যতম প্রধান অপটিমাইজেশন is
~~(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 <= (এক্স - মিনিট) * আর <= (সর্বাধিক - মিনিট) * আর
এখন, করতে দেয় অ্যাড ফিরে মিনিট সমীকরণ
মিনিট <= মিনিট + (এক্স - মিনিট) * আর <= মিনিট + (সর্বাধিক - মিনিট) * আর
এখন, করতে দেয় একটি ফাংশন বেছে নেওয়া হয়েছে, যা ফলাফল R যাতে তা সন্তুষ্ট হিসাবে আমাদের সমীকরণ পরিসীমা [মিনিট, সর্বোচ্চ]। এটি কেবল তখনই সম্ভব যখন ০ <= আর <= 1
ঠিক আছে. এখন, পরিসীমা দ অর্থাত [0,1] খুব Math.random () ফাংশন ফলাফল অনুরূপ। তাই না?
ম্যাথ.আরন্ডম () ফাংশনটি ভাসমান-পয়েন্ট, সিউডো-এলোমেলো সংখ্যাটি পরিসীমা [0, 1) এ প্রদান করে; এটি 0 থেকে (অন্তর্ভুক্ত) অবধি কিন্তু 1 (একচেটিয়া) সহ অন্তর্ভুক্ত নয়
উদাহরণ স্বরূপ,
min
+ 0 * ( max
- min
) = মিনিট
min
+ 1 * ( max
- min
) = সর্বোচ্চ
min
+ আর * ( max
- min
) = এক্স , যেখানে এক্সের নূন্যতম <= এক্স < সর্বোচ্চের ব্যাপ্তি রয়েছে
উপরের ফলাফল এক্স একটি এলোমেলো সংখ্যার। তবে ম্যাথ.র্যান্ডম () এর কারণে আমাদের বাম সীমাটি অন্তর্ভুক্ত রয়েছে এবং ডানদিকের সীমাটি একচেটিয়া। আমাদের ডান বাউন্ডকে অন্তর্ভুক্ত করতে আমরা 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;
জেএসফিডাল: 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/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / ম্যাথ / রেন্ডোম
গণিত আমার দৃ point় বিন্দু নয়, তবে আমি এমন একটি প্রকল্পে কাজ করছি যেখানে আমার ইতিবাচক এবং নেতিবাচক উভয়ের মধ্যে প্রচুর এলোমেলো সংখ্যা তৈরি করতে হবে।
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 টি সমানভাবে ৫ দ্বারা বিভাজন করে না: এটি ১ এর অবশিষ্টাংশ ছেড়ে যায়, সুতরাং আমাদের সম্ভাব্য উত্পন্ন মানগুলির 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]
যোগ করা হচ্ছে float
তার উপর ভিত্তি করে নির্দিষ্ট স্পষ্টতা সংস্করণের সাথে int
মধ্যে @ Francisc এর উত্তর সংস্করণ:
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, ...
এবং উত্তরের জন্য উত্তর
randomFloatFromInterval(1,3,0) // => 1, 2, 3
ক্রিপ্টো-শক্তিশালী র্যান্ডম পূর্ণসংখ্যার পরিসীমা [a, b] (অনুমান: একটি <বি)
let rand= (a,b)=> a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
console.log( rand(1,6) );
এটি প্রায় নয় বছর দেরীতে, তবে র্যান্ডোজস ডট কম এটিকে একটি সাধারণ ওয়ান-লাইনার করে তুলেছে :
rando(1, 6)
আপনার এইচটিএমএল ডকুমেন্টের শিরোনামে আপনাকে কেবল এটি যুক্ত করতে হবে এবং এলোমেলোভাবে সহজেই আপনি যা চান তা করতে পারেন। অ্যারে থেকে এলোমেলো মান, এলোমেলো jquery উপাদান, অবজেক্ট থেকে র্যান্ডম বৈশিষ্ট্য এবং এমনকি প্রয়োজনে পুনরাবৃত্তি প্রতিরোধ করা।
<script src="https://randojs.com/1.0.0.js"></script>
এটি আমার পক্ষে কাজ করে এবং পাইথনের র্যান্ডম.র্যান্ডিন্ট স্ট্যান্ডার্ড লাইব্রেরি ফাংশনের মতো মান তৈরি করে:
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));