Số JavaScript tối đa

Giống như tất cả mọi thứ, JavaScript có giới hạn. Điều thú vị là có những giới hạn nhân tạo và sau đó là những giới hạn vật lý. Tôi sẽ khám phá những giới hạn này và cố gắng đẩy chúng đến giới hạn thực sự của chúng càng nhiều càng tốt

Trong JavaScript, một Số được xác định bởi w3schools. com như

Không giống như nhiều ngôn ngữ lập trình khác, JavaScript không xác định các loại số khác nhau, như số nguyên, ngắn, dài, dấu phẩy động, v.v.

Số JavaScript luôn được lưu trữ dưới dạng số dấu phẩy động có độ chính xác kép, tuân theo tiêu chuẩn quốc tế IEEE 754

Định dạng này lưu trữ các số trong 64 bit, trong đó số (phân số) được lưu trữ trong các bit từ 0 đến 51, số mũ trong các bit từ 52 đến 62 và dấu ở bit 63

Điều này có ý nghĩa gì trong thực tế? . 7976931348623157e+308 hoặc sử dụng Số. GIÁ TRỊ TỐI ĐA;

Mọi thứ bắt đầu trở nên kỳ lạ khi chúng ta cố gắng vượt qua điểm này. Tôi đã thử chạy đoạn mã dưới đây với mong đợi “Infinity”. Điều đó đã không xảy ra

console.log(Number.MAX_VALUE+1);1.7976931348623157e+308

Điều này không phù hợp với tài liệu nêu rõ “Các số lớn hơn MAX_VALUE được biểu thị bằng vô cùng. ”

lưu ý bên lề. Các thử nghiệm bên dưới được thực hiện bằng bảng điều khiển Google Chrome, vì vậy các trình thông dịch JS khác có thể mang lại kết quả khác

Sau đó tôi đã tìm thấy một số tối đa không phải là Vô cực

console.log(Number.MAX_VALUE+999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);1.7976931348623157e+308

Nếu chúng ta thêm một "1" bổ sung như dưới đây

console.log(Number.MAX_VALUE+9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999991);Infinity

Bây giờ chúng ta có được Infinity. Vậy chuyện gì đã xảy ra?

Bây giờ chúng ta hãy nói về Số. MAX_SAFE_INTEGER, được định nghĩa là

Hằng số Number.MAX_SAFE_INTEGER đại diện cho số nguyên an toàn tối đa trong JavaScript (2⁵³-1)

Một lời giải thích thực tế là bất cứ điều gì vượt quá giới hạn này, trình thông dịch JavaScript sẽ không còn chịu trách nhiệm cho các hoạt động

Hãy nhìn vào đoạn mã dưới đây

console.log(Number.MAX_SAFE_INTEGER);
9007199254740991
console.log(Number.MAX_SAFE_INTEGER+1);
9007199254740992
let a = Number.MAX_SAFE_INTEGER+1;
let b = Number.MAX_SAFE_INTEGER+2;
console.log(a === b);
true

Từ các kết quả ở trên, chúng tôi thấy rằng chúng tôi chắc chắn có thể vượt lên trên “MAX_SAFE_INTEGER”, nhưng bất cứ điều gì chúng tôi muốn làm từ quan điểm thực tế đều không còn hiệu quả. Cả “a” và “b” đều được coi là bằng nhau, khi chúng ta biết chúng không

Nếu chúng ta muốn vượt quá MAX_SAFE_INTEGER thì sao?

JavaScript có một chức năng riêng được gọi là BigInt. Như tên của nó mô tả, nó xử lý các số lớn. Nó cũng cực kỳ đơn giản để kích hoạt. Thêm một chữ “n” vào cuối số và nó được chuyển đổi ngay lập tức

const theBiggestInt = 9007199254740991n;
typeof theBiggestInt;
"bigint"

Vậy tại sao không chỉ sử dụng “BigInt” mọi lúc? . Cuộc đuổi bắt?

Điều này có nghĩa là nếu bạn chuyển đổi từ Số sang BigInt và ngược lại, bạn có thể mất độ chính xác. Ngoài ra còn có một khả năng tương thích mà chỉ các trình duyệt hiện đại mới hỗ trợ nó. Đây thực sự không phải là một vấn đề vì rất có thể nó chỉ cần thiết trong NodeJS, được hỗ trợ

Bây giờ, chúng tôi sẽ thử MAX_VALUE mà chúng tôi đã gặp sự cố trước đó và bọc kết quả bên trong BigInt

console.log(BigInt(Number.MAX_VALUE));
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368n
console.log(BigInt(Number.MAX_VALUE+1));
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368n

Ví dụ trên cho thấy những gì đang xảy ra. Khi chúng ta thêm nhiều hơn vào Số. MAX_VALUE, đơn giản là nó bị bỏ qua. Cả hai phương trình dẫn đến cùng một câu trả lời. Tại sao?

Những gì chúng ta có thể làm bây giờ là sử dụng BigInt để vượt qua Số. GIÁ TRỊ TỐI ĐA. Lần này, chúng tôi sẽ sử dụng số gia so với giá trị BigInt của MAX_VALUE thay vì kết quả của MAX_VALUE. Bên dưới, chú ý vị trí của “+1n” trong dấu ngoặc so với đoạn mã trên

console.log(BigInt(Number.MAX_VALUE)+1n);
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858369n

Như chúng ta có thể thấy ở trên, chữ số cuối cùng của chúng ta đã tăng lên thành “9” từ “8”. Vì vậy, BigInt hoạt động như mô tả. Hãy thử so sánh của chúng tôi

let ab = BigInt(Number.MAX_VALUE);
let bb = BigInt(Number.MAX_VALUE)+1n;
console.log(ab === bb);
false

Như chúng ta có thể thấy, chúng ta có thể so sánh trên Số. Giới hạn MAX_VALUE, với nhược điểm là không thể sử dụng số thập phân

BigInt có giới hạn, tuy nhiên không có bất kỳ “giới hạn cứng” nào hoặc thậm chí là bất kỳ “giới hạn mềm” nào. Các tài liệu không đề cập đến nó. Từ trải nghiệm của những người khác trên StackOverflow, có vẻ như các giới hạn được điều chỉnh bởi trình thông dịch JavaScript và cả giới hạn bộ nhớ của thiết bị. Ngoài ra còn có một hiệu suất đáng chú ý khi đạt được những con số thực sự lớn

Tóm lại, có thể vượt quá giới hạn số gốc của JavaScript trong trường hợp hiếm hoi mà bạn cần. Một ví dụ sẽ là nếu bạn muốn tìm các số nguyên tố vì chúng không yêu cầu chữ số thập phân

Trong hầu hết các trường hợp, mặc dù bạn sẽ không cần sử dụng BigInt, nhưng bạn sẽ muốn đảm bảo rằng mình không vượt quá giới hạn gốc bằng cách kiểm tra Số. MAX_SAFE_INTEGER nếu bạn biết mình có thể đạt đến con số đó

Làm cách nào để có được số lượng tối đa trong JavaScript?

The Toán. hàm max() trả về số lớn nhất trong số các số được cung cấp dưới dạng tham số đầu vào hoặc - Vô cùng nếu không có tham số.

Làm cách nào để sử dụng max() trong JS?

Hàm max() của đối tượng Math chấp nhận nhiều số và trả về số lớn nhất trong số đó. .
Nếu bạn chuyển một số cho hàm này, nó sẽ trả về cùng một số
Và, nếu bạn không chuyển bất kỳ đối số nào, nó sẽ trả về vô cùng

Làm cách nào để đặt giới hạn số trong JavaScript?

Hằng số MAX_SAFE_INTEGER đại diện cho số nguyên an toàn tối đa trong JavaScript (253 – 1). Đối với số nguyên lớn hơn, hãy cân nhắc sử dụng BigInt.

Làm cách nào để lấy số tối đa trong mảng JavaScript?

Các phần tử tối thiểu và tối đa trong một mảng có thể được tìm thấy bằng 2 cách tiếp cận. Phương pháp 1. Sử dụng toán học. tối thiểu () và Toán. max() Các phương thức min() và max() của đối tượng Math là các hàm tĩnh trả về phần tử nhỏ nhất và lớn nhất được truyền cho nó