شمارش ستاره ها با 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
خصوصیات اصلی
- نحو تحت اللفظی: ضمیمه
n
برای ایجاد یک لفظی bigint (123n
). - نوع مشخص: این یکی از هفت نوع بدوی داخلی در JavaScript است (
typeof 1n
بازگرداندن"bigint"
). - بدون اعشار: Bigint فقط می تواند تعداد کامل (اعداد صحیح) را نشان دهد.
چه موقع از bigint استفاده کنید
از bigint استفاده کنید:
- کار با اعداد بزرگتر از
Number.MAX_SAFE_INTEGER
یا کوچکتر ازNumber.MIN_SAFE_INTEGER
بشر - به عنوان مثال در محاسبات مالی یا رمزنگاری ، حسابی عدد صحیح بزرگ مورد نیاز است.
- برخورد با عدد صحیح 64 بیتی از پایگاه داده ها یا سایر سیستم ها
ملاحظات
سریال سازی JSON
ارزش های Bigint در JSON پشتیبانی نمی شوند.
JSON.stringify({ value: 123n }); // TypeError
مخلوط نشوید
مقادیر bigint را نمی توان با مقادیر عدد معمولی مخلوط کرد (1n + 1
یک نوع است ، اما 1n + 1n
اشکالی ندارد)