استفاده از Math.random در جاوااسکریپت

اغلب در هنگام توسعه پروژه‌ها به دنبال راه‌هایی برای تولید اعداد تصادفی هستیم. در این مطلب، نحوه استفاده از Math.random در جاوااسکریپت برای تولید اعداد تصادفی را بررسی خواهیم‌کرد.

متد Math.random

Math یکی از آبجکت‌های built-in جاوااسکریپت است که ویژگی‌ها و متدهای متعددی برای انجام محاسبات ریاضیاتی دارد.

یکی از کاربرد‌های متداول آبجکت Math برای ایجاد اعداد تصادفی با استفاده از متد random است.

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const randomValue = Math.random();
const randomValue = Math.random();
const randomValue = Math.random();

 

این متد یک عدد کامل برنمی‌گرداند، بلکه یک مقدار اعشاری در بازه‌ی ۰ تا ۱ برمی‌گرداند. این مقادیر pseudo-random هستند، به این معنی که هرچند این مقادیر از نظر آماری تصادفی هستند اما ممکن است تکراری باشند و در نهایت پس از یک دوره‌ی زمانی الگوی غیرتصادفی داشته‌‌باشند. علت این اتفاق ذات الگوریتم‌های تولید‌کننده اعداد تصادفی است که هیچ ‌قت نمی‌توانند کاملا تصادفی باشند.

برای مطالعه بیشتر در مورد متد‌های Math.random می‌توانید به این لینک مراجعه کنید.

تابع تولید‌کننده اعداد تصادفی

در این قسمت، از متد Math.random برای ساختن یک تابع که یک عدد صحیح تصادفی بین دو مقدار مشخص را برمی‌گرداند، استفاده می‌کنیم.

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const getRandomNumber = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min
}
const getRandomNumber = (min, max) => { return Math.floor(Math.random() * (max - min + 1)) + min }
const getRandomNumber = (min, max) => {
  return Math.floor(Math.random() * (max - min + 1)) + min
}

 

متد Math.random در این تابع یک عدد اعشاری در بازه ۰ تا ۱ برمی‌گرداند. لذا بازه‌های اعداد به صورت زیر خواهند بود:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[۰ .................................... ۱)
[min .................................... max)
[۰ .................................... ۱) [min .................................... max)
[۰ .................................... ۱)

[min .................................... max)

 

با فاکتورگیری می‌توانیم بازه‌ی دوم را به صورت بازه‌ای از اعداد بین ۰ و max-min تبدیل کنیم:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[۰ .................................... ۱)
[۰ .................................... max - min)
[۰ .................................... ۱) [۰ .................................... max - min)
[۰ .................................... ۱)

[۰ .................................... max - min)

 

اکنون برای بدست آوردن یک عدد تصادفی از کد زیر استفاده می‌کنیم که در اینجا x عدد تصادفی است:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const x = Math.random() * (max - min)
const x = Math.random() * (max - min)
const x = Math.random() * (max - min)

 

در این حالت مقدار max در بازه‌ی مورد نظر ما قرار ندارد. برای اینکه بازه‌ اعداد شامل max نیز باشد مقدار ۱ و مقدار min را که قبلا کم کرده‌ بودیم، دوباره اضافه کنیم تا مقدار عدد تصادفی ما در بازه [min,max) باشد.

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const x = Math.random() * (max - min + 1) + min
const x = Math.random() * (max - min + 1) + min
const x = Math.random() * (max - min + 1) + min

 

در مرحله آخر، هدف این است که مطمئن شویم مقدار x همواره مقداری صحیح یا integer است:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const x = Math.floor(Math.random() * (max - min + 1)) + min
const x = Math.floor(Math.random() * (max - min + 1)) + min
const x = Math.floor(Math.random() * (max - min + 1)) + min

 

در این مرحله می‌توانیم به جای متد floor از متد round استفاده کنیم. اما این متد اعداد را با توزیع غیریکنواختی ایجاد می‌کند. به این معنی که با استفاده از floor، هردو max و min از شانس یکسانی برای اینکه خروجی تابع باشند برخوردارند و توزیع یکنواختی دارند.

 

[button class=”github-btn” href=”http://frontcast.ir/course/data-structures-and-algorithms”]دوره ساختمان داده و الگوریتم‌ها در جاوااسکریپت[/button]

 

دیدگاه‌ها:

افزودن دیدگاه جدید