Hằng số
2 biểu thị số nguyên an toàn tối đa trong JavaScript [253 - 1].Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
2 constant represents the maximum safe integer in JavaScript [253 – 1].Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
Đối với các số nguyên lớn hơn, hãy xem xét sử dụng
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
3.Thử nó
Sự mô tả
Hằng số
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
4 có giá trị Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
5 [9,007,199,254,740,991, hoặc ~ 9 triệu triệu].Định dạng điểm nổi chính xác gấp đôi chỉ có 52 bit để biểu diễn mantissa, do đó nó chỉ có thể biểu diễn một cách an toàn các số nguyên giữa -[253 -1] và 253 -1. "An toàn" trong bối cảnh này đề cập đến khả năng biểu diễn số nguyên chính xác và so sánh chúng một cách chính xác. Ví dụ,
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
6 sẽ đánh giá đúng, điều này không chính xác về mặt toán học. Xem Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
7 để biết thêm thông tin.Bởi vì
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
4 là một thuộc tính tĩnh của Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
9, bạn luôn sử dụng nó dưới dạng Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
2, thay vì là một thuộc tính của giá trị số.Ví dụ
Trả về giá trị của max_safe_integer
Number.MAX_SAFE_INTEGER; // 9007199254740991
Mối quan hệ giữa MAX_SAFE_Integer và Epsilon
if [num1 * num2 1 0000 ---- 0001. * 2
|-- 52 bits --| |-- 52 bits --|
Theo mô hình này, khi số lượng lớn hơn 9,007,199,254,740,992 * 2 = 18.014,398,509,481,984 Chỉ có thể giữ được 4 lần phân số:
input: 18014398509481984 + 1 output: 18014398509481984 // expected: 18014398509481985
input: 18014398509481984 + 2 output: 18014398509481984 // expected: 18014398509481986
input: 18014398509481984 + 3 output: 18014398509481984 // expected: 18014398509481987
input: 18014398509481984 + 4 output: 18014398509481988 // expected: 18014398509481988
Làm thế nào về các con số giữa [2 251 799 813 685 248, 4 503 599 627 370 496]?2 251 799 813 685 248, 4 503 599 627 370 496 ]?
1 . 0000 ---- 0001 * 2^51 => 1 0000 ---- 000.1
|-- 52 bits --| |-- 52 bits --|
Giá trị 0,1 trong nhị phân chính xác là 2^-1 [= 1/2] [= 0,5] vì vậy khi số nhỏ hơn 4,503,599,627,370,496 [2^52], có một bit có sẵn để biểu thị 1/2 lần :4,503,599,627,370,496 [2^52], there is one bit available to represent the 1/2 times of the integer:
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
0Ít hơn 2.251.799.813.685.248 [2^51]2,251,799,813,685,248 [2^51]
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
1Và phạm vi có sẵn của phần số mũ là gì? 11 bit được phân bổ cho nó theo định dạng.exponent part? 11 bits allotted for it by the format.
Từ Wikipedia [để biết thêm chi tiết, đến đó]
Vì vậy, để làm cho phần số mũ là 2^52, chính xác chúng ta cần đặt E = 1075.