برنامه نویسی

شمارش ستاره ها با JavaScript: مورد استفاده برای Bigint Primitive

جاوا اسکریپت Number نوع یک مقدار نقطه شناور 64 بیتی است (IEEE 754 با دقت دو برابر). در حالی که این امر دامنه گسترده ای به شما می دهد ، اعداد JavaScript هنوز هم محدودیتی دارند. مقادیر عدد صحیح در JavaScript فقط تا 2⁵³ دقیق هستند.

شماره 2⁵³ نتیجه ای را که هنگام ضرب شدن شماره 2 به خودی خود ، 53 بار پشت سر هم کسب می کنید ، نشان می دهد: 2 ** 53 یا 9،007،199،254،740،991 یا “9 Quadrillion” ، چند تریلیون را بدهید یا بگیرید.

اما به یاد آوردن این شماره زحمت نکشید. JavaScript با استفاده از آن به عنوان یک نام آسان برای ثبت نام کمک کرده است: Number.MAX_SAFE_INTEGERبشر همانطور که از نام آن پیداست ، پس از شروع کار با مقادیر عدد صحیح بزرگتر از آن ، نمی توانید با اطمینان از صحت هر نتیجه ای فرض کنید.

منظور ما از “ایمن” است.

  • با دقت نشان داده شده: یک عدد صحیح ایمن به دلیل از دست دادن دقت به ارزش دیگری می رسد.
  • به درستی مقایسه شده: مقایسه بین عدد صحیح ایمن نتایج صحیح ریاضی خواهد داشت.

برای نشان دادن ، بیایید با یک زن و شوهر کار کنیم بی ایمان ارزش ها و ببینید که چگونه از نظر ریاضی اشتباه پیش می رود:

const x = Number.MAX_SAFE_INTEGER;
console.log(x + 1 === x + 2); // true! But not correct
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ممکن است فکر کنید 2⁵³ به اندازه کافی بزرگ است. شما در فکر کردن توجیه می شوید. اگر سعی کردید حداکثر 2 را بشمارید ، حتی با یک عدد در ثانیه ، حدود 285 میلیون سال طول می کشد. این تقریباً 47 برابر بیشتر از انسان است یا اجداد ما روی زمین وجود داشته اند.

کار با چنین تعداد عظیمی معمولی نیست ، اما غیرقابل تصور نخواهد بود. در اینجا چند نمونه شامل مقادیر عدد صحیح در کجا آورده شده است Number.MAX_SAFE_INTEGER به اندازه کافی بزرگ نیست

ژنهای موجود در بدن انسان

تعداد تخمین زده شده از نسخه های ژن در بدن انسان بالغ (در بین 40 تریلیون سلول ما) حدود 2 × 10 (2 quintillion) است. MAX_SAFE_INTEGER است ، 222 برابر خیلی کوچک برای شمارش همه ژن های ما.

میلی ثانیه از زمان Big Bang

سن جهان در حدود 13.8 میلیارد سال یا حدود 4.4 × 10²⁰ میلی ثانیه (440 quintillion ms) است. MAX_SAFE_INTEGER در مورد 50،000 برابر خیلی کوچک برای شمارش میلی ثانیه از طلوع زمان.

ستاره ها در جهان قابل مشاهده

تعداد تخمین زده شده از ستاره ها در جهان قابل مشاهده بین 10 درجه و 10 درجه (1 سپتیلیون) است. MAX_SAFE_INTEGER در مورد 100 میلیون بار خیلی کوچک برای شمارش همه ستاره های جهان.

پس Number.MAX_SAFE_INTEGER به نظر می رسد بزرگ است ، برای محاسبات خاص در نجوم ، جغرافیا ، رمزنگاری یا سیستم های بزرگ مالی کافی نیست. اینجاست BigInt نوع بدوی وارد می شود. BigInt می تواند مقادیر بسیار فراتر از آن را اداره کند Numbersمحدودیت ها

به هر حال ، یک مربوطه نیز وجود دارد Number.MIN_SAFE_INTEGER ارزش این نمایانگر جاوا اسکریپت است کوچکترین مقدار عدد صحیح ایمن ، یا -(2⁵³ - 1)بشر

ملاقات BigInt

BigInt یک نوع ابتدایی است که در ES2020 معرفی شده است که می تواند عدد صحیح را با آن نشان دهد دقت خودسرانهبشر این بدان معناست که می توانید با اعداد به اندازه حافظه رایانه خود کار کنید.

بوها BigInt مقدار با ضمیمه نامه ایجاد می شود n تا پایان یک عدد صحیح به معنای واقعی کلمه (یا با فراخوانی BigInt() عملکرد و دادن یک عدد صحیح یا رشته.

در اینجا نحوه عملکرد آن آورده شده است:

const x = BigInt(Number.MAX_SAFE_INTEGER);
console.log(x + 1n === x + 2n); // false, now works correctly
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

خصوصیات اصلی

  1. نحو تحت اللفظی: ضمیمه n برای ایجاد یک لفظی bigint (123n).
  2. نوع مشخص: این یکی از هفت نوع بدوی داخلی در JavaScript است (typeof 1n بازگرداندن "bigint").
  3. بدون اعشار: Bigint فقط می تواند تعداد کامل (اعداد صحیح) را نشان دهد.

چه موقع از bigint استفاده کنید

از bigint استفاده کنید:

  1. کار با اعداد بزرگتر از Number.MAX_SAFE_INTEGER یا کوچکتر از Number.MIN_SAFE_INTEGERبشر
  2. به عنوان مثال در محاسبات مالی یا رمزنگاری ، حسابی عدد صحیح بزرگ مورد نیاز است.
  3. برخورد با عدد صحیح 64 بیتی از پایگاه داده ها یا سایر سیستم ها

ملاحظات

سریال سازی JSON

ارزش های Bigint در JSON پشتیبانی نمی شوند.

JSON.stringify({ value: 123n }); // TypeError
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مخلوط نشوید

مقادیر bigint را نمی توان با مقادیر عدد معمولی مخلوط کرد (1n + 1 یک نوع است ، اما 1n + 1n اشکالی ندارد)

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا