জাভাস্ক্রিপ্টে দুটি সংখ্যার মধ্যে এলোমেলো সংখ্যা তৈরি করুন


1795

জাভাস্ক্রিপ্টে একটি নির্দিষ্ট পরিসরে (যেমন 1 থেকে 6: 1, 2, 3, 4, 5, বা 6) এলোমেলো সংখ্যা তৈরি করার কোনও উপায় আছে কি?


12
ম্যাথ.ফ্লুর (ম্যাথ.র্যান্ডম () * 7)
আমজাদ মাসাদ

65
শিওর .. ম্যাথ.ফ্লুর (ম্যাথ.র্যান্ডম () * 6 + 1)
আমজাদ মাসাদ

3
নাবিল কাদিমি কীভাবে নেতিবাচক এলোমেলো সংখ্যা তৈরি করতে পারে সে সম্পর্কে একটি নিবন্ধ লিখেছিলেন ।
ম্যাডক

এখানে একটি দরকারী গিস্টটি রয়েছে
ড্যান কে কে

w3schools.com/jsref/jsref_random.aspMath.floor((Math.random()*10)+1); এ এখানে উল্লিখিত হিসাবে এর মতো সমাধান আপনার পক্ষে কাজ করতে পারে না কেন ..?
শাশ্বত

উত্তর:


2113

গুরুত্বপূর্ণ

নিম্নলিখিত কোডটি কেবলমাত্র সর্বনিম্ন মান হলে কাজ করে 1। এটি ব্যতীত সর্বনিম্ন মানগুলির জন্য কাজ করে না 1

যদি আপনি 1 ( এবং শুধুমাত্র 1 ) এবং 6 এর মধ্যে একটি এলোমেলো পূর্ণসংখ্যা পেতে চান , আপনি গণনা করতে হবে:

Math.floor(Math.random() * 6) + 1  

কোথায়:

  • 1 হল শুরুর নম্বর number
  • 6 সম্ভাব্য ফলাফলের সংখ্যা (1 + শুরু (6) - শেষ (1) )

45
এটি @ মাইক হিসাবে কাজ করার সময়, ফ্রান্সিকের নীচে রয়েছে বলে আরও জেনেরিক সংস্করণটি উল্লেখ করা ভাল হবে :-)।
রেমন্ড মাচিরা

58
-1। গুগলিংয়ের পরে আমি এই প্রশ্নের সন্ধান পেয়েছি শিরোনামটি "" জাভাস্ক্রিপ্টে দুটি সংখ্যার মধ্যে এলোমেলো মান উত্পন্ন করুন "।" ন্যূনতম মান 0 হলে কাজ করবে না
ইয়েডেম

18
আপনি দুটি বৃহত্তর সংখ্যার মধ্যে একটি সংখ্যা চান তবে কাজ করে না। ম্যাথ.ফ্লুর (ম্যাথআর্যান্ডম () * 900) + 700
রব

14
এটি কেবলমাত্র সর্বনিম্ন 1 হলে কাজ করে the যদি নূন্যতম 2 হয় এবং আমরা এখনও ব্যবহার Math.floor(Math.random() * 6) + 2করি তবে এর Math.random()ফলাফলটি যদি 0.99 হয় তবে আমাদের এলোমেলো মান হবে7
অ্যান্টিটক্সিক

27
এই কোডটি ভাল নয় কারণ, কোনও সংখ্যা নিয়ে কাজ করে না। @ ফ্রানসিস্ক কোডটি সঠিক।
সিংহ রাজা

2283
function randomIntFromInterval(min, max) { // min and max included 
  return Math.floor(Math.random() * (max - min + 1) + min);
}

এটি "অতিরিক্ত" কী করে তা এলোমেলো অন্তরগুলির অনুমতি দেয় যা 1 দিয়ে শুরু হয় না। সুতরাং আপনি উদাহরণস্বরূপ 10 থেকে 15 পর্যন্ত একটি এলোমেলো নম্বর পেতে পারেন। নমনীয়তা.


5
এটি দুর্দান্ত কারণ কারণ যদি কেউ toআর্গকে অন্তর্ভুক্ত না করে তবে fromআর্গ সর্বাধিক হিসাবে দ্বিগুণ হয়
জেসন

12
হ্যালো. এটি এমডিএন থেকে এসেছে: 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.( ডেভেলপার.মোজিলা.আর.ইন-
ফ্রান্সিস্ক

5
উপরের মন্তব্য পড়ুন। এলোমেলো [0,1] এর ভিতরে নয়, [0,1]।
ফ্রান্সিস্ক

3
নিম্ন সংখ্যাটি 0 হলে দুর্দান্ত কাজ করে
রবিন জিম্মারম্যান

2
মনে রাখবেন যে মিনিট এবং সর্বাধিক পূর্ণসংখ্যা হলে এই সমাধানটি সঠিক, অন্যথায় আপনি অন্তর [মিনিট, সিল (সর্বাধিক)] এর ফলাফল পেতে পারেন। অর্থাৎ আপনি ফলাফল পেতে পারেন যা সীমার বাইরে নয় কারণ সর্বোচ্চের চেয়ে বেশি।
কলিমার্কো

326

Math.random ()

সর্বনিম্ন ( অন্তর্ভুক্ত ) এবং সর্বাধিক ( অন্তর্ভুক্ত ) এর মধ্যে একটি পূর্ণসংখ্যার এলোমেলো নম্বর প্রদান করে :

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
আমি এই উত্তর বিশ্বাস। এটি কেন কাজ করে তার কোনও লিঙ্ক বা স্পষ্ট ব্যাখ্যা দিতে পারেন? সম্ভবত ম্যাথ.াউন্ড কীভাবে পক্ষপাতিত্ব দেবে তার একটি উদাহরণ, এবং এর অর্থ কেন আমাদের এই বরং জটিল-আপাত সূত্রটি ব্যবহার করতে হবে?
রবিন অ্যান্ড্রুজ

6
@alikuli অনেক কাজ করার জন্য [1,2], সেখানে 25% সুযোগ Math.random()এইসব এক থেকে একটি সংখ্যা দিতে হবে [0,0.49], [0.5,0.99], [1,1.49], [1.5,1.99]। এই ব্যবধানগুলিকে গোল করার ফলে 0, 1, 1, 2 দেখা যায় যা এমনকি কোনও বিতরণ নয়। তাদের
মেঝেতে

1
@shuji এই হল অন্যান্যের মধ্যে, সঠিক উত্তর। আমি কেবল স্পষ্ট করে বলতে চেয়েছিলাম কেন Math.roundওভার ব্যবহার করা Math.floorবিভিন্ন ফলাফল দেয়।
monkapish

আমি খুঁজে পেয়েছি সবচেয়ে সঠিক সমাধান: function getRandomInt(min, max) { return Math.round((min - 0.5) + Math.random() * (max - min + 1)); }
সাদিক

91

অন্যান্য সমাধান:

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

অনলাইন চেষ্টা করুন


6
আপনি int সিনট্যাক্সিস ব্যাখ্যা (বা রেফারেন্স দিতে) মনে করবেন? আমি এর আগে দেখিনি! মার্জিত সমাধান তবে বোঝা শক্ত।
দিয়েগোডিডি

27
ডাবল টিল্ড ~~a এবং বিটওয়াইস বা (ক | 0) দ্রুত ম্যাথ.ফ্লোয়ার (ক)
এডি 9999

7
a | 0একটি স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করার দ্রুততম এবং সর্বাধিক অনুকূলিত উপায়। এটি কেবলমাত্র পূর্ণসংখ্যা ( "444"এবং "-444") যুক্ত স্ট্রিংগুলির সাথে কাজ করে , যেমন কোনও ফ্লোট / ভগ্নাংশ নয়। এটি 0ব্যর্থ হয় এমন প্রতিটি কিছুর জন্য একটি ফলন করে । এটি asm.js. এর পিছনে অন্যতম প্রধান অপটিমাইজেশন is
পাইলাউ

3
দ্রষ্টব্য: আপনি যদি কিছু সংখ্যক লোকের সাথে কাজ করছেন তবে ডাবল টিলড কাজ করবে না। চেষ্টা করুন ~~(Math.random() * (50000000000000 - 0 + 1)) + 0এবংMath.floor(Math.random() * (50000000000000 - 0 + 1)) + 0
ব্রুনোএলএম

3
"ডাবল টিলড এবং বিটওয়াইস OR / মথ ডট ফ্লোর লেখার দ্রুত উপায়" হ'ল একটি সুন্দর ছড়া দম্পতি যা আমার সকালে আলোকিত করে। ধন্যবাদ @ এডি 9999!
teedyay

60

টি এল; ডিআর

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 (একচেটিয়া) সহ অন্তর্ভুক্ত নয়

উদাহরণ স্বরূপ,

কেস আর = 0

min+ 0 * ( max- min) = মিনিট

কেস আর = 1

min+ 1 * ( max- min) = সর্বোচ্চ

ম্যাথ.র্যান্ডম 0 <= আর <1 ব্যবহার করে র্যান্ডম কেস

min+ আর * ( max- min) = এক্স , যেখানে এক্সের নূন্যতম <= এক্স < সর্বোচ্চের ব্যাপ্তি রয়েছে

উপরের ফলাফল এক্স একটি এলোমেলো সংখ্যার। তবে ম্যাথ.র্যান্ডম () এর কারণে আমাদের বাম সীমাটি অন্তর্ভুক্ত রয়েছে এবং ডানদিকের সীমাটি একচেটিয়া। আমাদের ডান বাউন্ডকে অন্তর্ভুক্ত করতে আমরা 1 দ্বারা ডান আবদ্ধ বাড়া এবং ফলাফল মেঝে।

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}

এলোমেলো নম্বর পেতে

generateRandomInteger(-20, 20);



24
var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;

2
প্রকৃতপক্ষে. আমি ভুলে গিয়েছিলাম 0 অন্তর্ভুক্ত ছিল। ঠিক কর.
ryebr3ad

3
এটি অংশ সিউডোকোড ... কেউ হয়তো এটি বাস্তব বলে মনে করতে পারেন এবং সেটিকে এটির মতো ব্যবহার করার চেষ্টা করবেন।
গ্রাভিটিবয়

35
@ গ্রাভিটিবয় আপনি কি সম্পর্কে কথা বলছেন? যদি কেউ [একটি সংখ্যা বাছাই ...] এর জন্য কোনও নম্বর প্রতিস্থাপন করতে না পারে তবে তারা প্রোগ্রামার হিসাবে উপযুক্ত নাও হতে পারে।
ryebr3ad

7
@ রাইবার 3 এড -১! এটি জাভাস্ক্রিপ্টে সিউডো কোডে নয় এবং সমস্ত পাঠকও পারদর্শী প্রোগ্রামার নয় said অনেকেই শিক্ষানবিশ!
স্টিভ

3
@ রাইবার ৩ এড: আমার এক সহকর্মী ছিলেন যা ডাটাবেস পরিবেশ সম্পর্কে ইন্টার্ন শিখিয়েছিল তাদের সমর্থন দরকার। তিনি তাদের একটি টেবিলের বাইরে সমস্ত কিছু নির্বাচন করতে বলেছিলেন এবং তারা এসকিউএল ক্যোয়ারী সম্পাদক থেকে "সমস্ত কিছু বাইরে ..." লেখা শুরু করেছিলেন। আপনি যেমন করেছিলেন তেমনই তার প্রতিক্রিয়া ছিল।
এলিসেডিল

22

জেএসফিডাল: 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/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / ম্যাথ / রেন্ডোম


14

গণিত আমার দৃ 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)

অবশ্যই, আপনি সংখ্যা ব্যতীত অন্য কিছু দিয়ে এটি করবেন না তা নিশ্চিত করতে আপনি কিছু বৈধতাও যুক্ত করতে পারেন। এছাড়াও নিশ্চিত হন যে মিনিট সর্বদা সর্বোচ্চের চেয়ে কম বা সমান।


5
এটি কেবল ভুল। min + Math.random() * maxআপনাকে ন্যূনতম এবং সর্বনিম্ন + সর্বোচ্চের মধ্যে নম্বর দেবে যা আপনি চান তা নয়। এর প্রথম শাখাটি ifসঠিক, তবে এটি সরলভাবে বলা যেতে পারে return min + Math.random() * (max - min), যা সঠিক সমাধান যা নির্বিশেষে মিনিট ইতিবাচক বা নেতিবাচক (অন্যান্য উত্তরগুলি দেখুন)। এছাড়াও, মনে রাখবেন যে আপনি যদি ভগ্নাংশ চান না তবে ফলাফলটি মেঝে করা দরকার।
আভিশ

10

আমি আরও নমনীয় ফাংশন লিখেছি যা আপনাকে এলোমেলো সংখ্যা দিতে পারে তবে কেবল পূর্ণসংখ্যার নয়।

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

স্থির সংস্করণ।


এটি কোনও ভাল সমাধান নয় কারণ এটি ন্যূনতম মান হিসাবে শূন্যের সাথে কাজ করবে না। @ লাইওরের উত্তর দেখুন।
সেবাস্তিয়ান

অবশ্যই এটি ন্যূনতম মান হিসাবে শূন্যের সাথে কাজ করে। তুমি কি চেষ্টা করেছিলে? এটি কাজ না করার কোনও কারণ নেই। এটি 0 দিয়ে বিরতি হিসাবে কাজ করবে না যা অদ্ভুত নয় (অন্তর = 0? ...)।
এলচুপচাবড়া

আমি ন্যূনতম মান হিসাবে শূন্যের সাথে এই ফাংশনটিতে একাধিকবার দৌড়েছি এবং আউটপুটটিতে কখনও শূন্য পাইনি। বা আমি যথেষ্ট ভাগ্যবান নই ...
সেবাস্তিয়ান

তুমি ঠিক. "+ বিরতি" ভুল জায়গায় ছিল। এখন পরীক্ষা করুন। অদ্ভুত বিষয় যা মাঝে মাঝে কনসোল.লগ আমাকে 0.3 * এর পরিবর্তে 0.3 * এর পরিবর্তে 0.3 * দেয় ০.০ নয় 0.3।
এলচুপচাবড়া

9

উদাহরণ

1 এবং 10 এর মধ্যে একটি এলোমেলো নম্বর ফিরিয়ে দিন:

Math.floor((Math.random() * 10) + 1);

ফলাফল হতে পারে: 3

নিজেকে চেষ্টা করুন: এখানে

-

বা লড্যাশ / অনস্কর ব্যবহার:

_.random(min, max)

দস্তাবেজ: - লোডাশ - অদ্বিতীয়


1
সুতরাং আপনার 9 বা 10 ঠিক আছে? যদি হ্যাঁ: কনট্যান্ড এলোমেলো সংখ্যা = ম্যাথ.ফ্লুর ((ম্যাথআর্যান্ডম () * 10) + 1) কনস্ট নাইনআরটেন = এলোমেলো সংখ্যা% 2 === 0? 9: 10
সেবাস্তিয়ান লারা 14

7

অনেক উত্তর এবং প্রায় একই ফলাফল সত্ত্বেও। আমি আমার উত্তর যুক্ত করতে এবং এর কার্যকারিতা ব্যাখ্যা করতে চাই। কারণ একটি লাইন কোড কাস্ট করার চেয়ে এটির কাজটি বোঝা গুরুত্বপূর্ণ। এলোমেলো সংখ্যা তৈরি করা সহজ গণিত ছাড়া কিছুই নয়।

কোড:

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));
}

6

আমি টাইপস্ক্রিপ্টে র্যান্ডম নম্বর জেনারেটরটি সন্ধান করছিলাম এবং আমি উত্তরগুলি পড়ে সমস্ত লিখেছিলাম, আশা করি এটি টাইপস্ক্রিপ্ট কোডারদের জন্য কাজ করবে।

    Rand(min: number, max: number): number {
        return (Math.random() * (max - min + 1) | 0) + min;
    }   

5

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]


এখন, এটাকেই আমি ওভারকিল বলি।
2x সামুরাই

2
@ 2x সামুরাই, আপনার কেন এটি প্রয়োজন হতে পারে এবং এটি কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য আমি উত্তরটি আপডেট করেছি। এটা কি ভালো? : পি
জেরেমি ব্যাংকগুলি

আপনি যদি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এবং অভিন্নভাবে বিতরণ করা এলোমেলো সংখ্যা চান তবে এটি মোটেও ওভারকিল নয়। এই প্রয়োজনীয়তাগুলি পূরণ করে এমন এলোমেলো সংখ্যা তৈরি করা শক্ত। দুর্দান্ত উত্তর, @ জেরেমি ব্যাংকস।
থোমাসকনরড

4

যোগ করা হচ্ছে 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

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) );


1

এই কাজ করা উচিত:

const getRandomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min

1

আমি ES6 ডিফল্ট পরামিতি ব্যবহার করে এটি করার জন্য একটি দুর্দান্ত নতুন উপায় আবিষ্কার করেছি। এটি অত্যন্ত নিফটি কারণ এটি একটি যুক্তি বা দুটি তর্ককে অনুমতি দেয়। এটা এখানে:

function random(n, b = 0) {
    return Math.random() * (b-n) + n;
}

1

এটি প্রায় নয় বছর দেরীতে, তবে র্যান্ডোজস ডট কম এটিকে একটি সাধারণ ওয়ান-লাইনার করে তুলেছে :

rando(1, 6)

আপনার এইচটিএমএল ডকুমেন্টের শিরোনামে আপনাকে কেবল এটি যুক্ত করতে হবে এবং এলোমেলোভাবে সহজেই আপনি যা চান তা করতে পারেন। অ্যারে থেকে এলোমেলো মান, এলোমেলো jquery উপাদান, অবজেক্ট থেকে র্যান্ডম বৈশিষ্ট্য এবং এমনকি প্রয়োজনে পুনরাবৃত্তি প্রতিরোধ করা।

<script src="https://randojs.com/1.0.0.js"></script>

ইতিমধ্যে ওয়ান-লাইনার এমন কিছু করার জন্য কেন নির্ভরতা যুক্ত করবেন? জেএস সম্প্রদায়ের লাইব্রেরি যুক্ত করার
ড্যানিয়েল কুক

পড়া এবং মনে রাখা সহজ। যদিও আমি রাজি
আ্যারন প্লোচার্জেক

1

এটি আমার পক্ষে কাজ করে এবং পাইথনের র্যান্ডম.র্যান্ডিন্ট স্ট্যান্ডার্ড লাইব্রেরি ফাংশনের মতো মান তৈরি করে:


function randint(min, max) {
   return Math.round((Math.random() * Math.abs(max - min)) + min);
}

console.log("Random integer: " + randint(-5, 5));


1

মূলত ডাইসের মতো 1-6 ফিরতে

return Math.round(Math.random() * 5 + 1);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.