Hướng dẫn what is the largest possible number in javascript? - con số lớn nhất có thể trong javascript là bao nhiêu?

Hằng số

Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
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).

Đố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 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
1 là 2-52, trong khi
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
4 là 253-1-cả hai đều có nguồn gốc từ chiều rộng của mantissa, là 53 bit (với bit cao nhất luôn là 1). Nhân chúng sẽ cho một giá trị rất gần - nhưng không bằng - với 2.

Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998

Thông số kỹ thuật

Sự chỉ rõ
Thông số kỹ thuật ngôn ngữ Ecmascript # sec-number.max_safe_integer
# sec-number.max_safe_integer

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

Thuộc tính

if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
3 đại diện cho giá trị số tối đa có thể thể hiện trong JavaScript.
if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
3
property represents the maximum numeric value representable in JavaScript.

Thử nó

Sự mô tả

Thuộc tính

if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
4 có giá trị xấp xỉ
if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
5 hoặc 21024 - 1. Các giá trị lớn hơn
if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
4 được biểu diễn dưới dạng
if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
7 và sẽ mất giá trị thực.

Bởi vì

if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
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
if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
3, thay vì là một thuộc tính của giá trị số.

Ví dụ

Sử dụng MAX_VALUE

Mã sau nhân nhân hai giá trị số. Nếu kết quả nhỏ hơn hoặc bằng

if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}
4, hàm
input: 9007199254740992 + 1  output: 9007199254740992  // expected: 9007199254740993
input: 9007199254740992 + 2  output: 9007199254740994  // expected: 9007199254740994
input: 9007199254740992 + 3  output: 9007199254740996  // expected: 9007199254740995
input: 9007199254740992 + 4  output: 9007199254740996  // expected: 9007199254740996
2 được gọi là; Mặt khác, hàm
input: 9007199254740992 + 1  output: 9007199254740992  // expected: 9007199254740993
input: 9007199254740992 + 2  output: 9007199254740994  // expected: 9007199254740994
input: 9007199254740992 + 3  output: 9007199254740996  // expected: 9007199254740995
input: 9007199254740992 + 4  output: 9007199254740996  // expected: 9007199254740996
3 được gọi.

if (num1 * num2 <= Number.MAX_VALUE) {
  func1();
} else {
  func2();
}

Thông số kỹ thuật

Sự chỉ rõ
Đặc tả ngôn ngữ Ecmascript # sec-number.max_value
# sec-number.max_value

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

  • input: 9007199254740992 + 1  output: 9007199254740992  // expected: 9007199254740993
    input: 9007199254740992 + 2  output: 9007199254740994  // expected: 9007199254740994
    input: 9007199254740992 + 3  output: 9007199254740996  // expected: 9007199254740995
    input: 9007199254740992 + 4  output: 9007199254740996  // expected: 9007199254740996
    
    4
  • Đối tượng
    Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998
    
    9 nó thuộc về

Nhiều câu trả lời trước đó đã chỉ ra

input: 9007199254740992 + 1  output: 9007199254740992  // expected: 9007199254740993
input: 9007199254740992 + 2  output: 9007199254740994  // expected: 9007199254740994
input: 9007199254740992 + 3  output: 9007199254740996  // expected: 9007199254740995
input: 9007199254740992 + 4  output: 9007199254740996  // expected: 9007199254740996
6 là đúng khi xác minh rằng 9,007,199,254,740,991 là số nguyên tối đa và an toàn.true to verify that 9,007,199,254,740,991 is the maximum and safe integer.

Nhưng nếu chúng ta tiếp tục tích lũy:

input: 9007199254740992 + 1  output: 9007199254740992  // expected: 9007199254740993
input: 9007199254740992 + 2  output: 9007199254740994  // expected: 9007199254740994
input: 9007199254740992 + 3  output: 9007199254740996  // expected: 9007199254740995
input: 9007199254740992 + 4  output: 9007199254740996  // expected: 9007199254740996

Chúng ta có thể thấy rằng trong số các con số lớn hơn 9,007,199,254,740,992, chỉ có số lượng thậm chí có thể thể hiện.9,007,199,254,740,992, only even numbers are representable.

Đó là một mục để giải thích cách thức định dạng nhị phân 64 bit chính xác gấp đôi. Hãy xem làm thế nào 9,007,199,254,740,992 được giữ (đại diện) bằng cách sử dụng định dạng nhị phân này.double-precision 64-bit binary format works. Let's see how 9,007,199,254,740,992 be held (represented) by using this binary format.

Sử dụng một phiên bản ngắn gọn để chứng minh nó từ 4,503,599,627,370,496:4,503,599,627,370,496:

  1 . 0000 ---- 0000  *  2^52            =>  1  0000 ---- 0000.  
     |-- 52 bits --|    |exponent part|        |-- 52 bits --|

Ở phía bên trái của mũi tên, chúng ta có giá trị bit 1 và điểm radix liền kề. Bằng cách tiêu thụ phần số mũ ở bên trái, điểm radix được di chuyển 52 bước sang phải. Điểm radix kết thúc ở cuối và chúng tôi nhận được 4503599627370496 trong nhị phân thuần túy.bit value 1, and an adjacent radix point. By consuming the exponent part on the left, the radix point is moved 52 steps to the right. The radix point ends up at the end, and we get 4503599627370496 in pure binary.

Bây giờ chúng ta hãy tiếp tục tăng phần phân số với 1 cho đến khi tất cả các bit được đặt thành 1, bằng 9,007,199,254,740,991 trong thập phân.9,007,199,254,740,991 in decimal.

  1 . 0000 ---- 0000  *  2^52  =>  1  0000 ---- 0000.  
                       (+1)
  1 . 0000 ---- 0001  *  2^52  =>  1  0000 ---- 0001.  
                       (+1)
  1 . 0000 ---- 0010  *  2^52  =>  1  0000 ---- 0010.  
                       (+1)
                        . 
                        .
                        .
  1 . 1111 ---- 1111  *  2^52  =>  1  1111 ---- 1111. 

Bởi vì định dạng chính xác kép 64 bit hoàn toàn phân bổ 52 bit cho phần phân số, không có thêm bit nào nếu chúng ta thêm 1 bit khác, vì vậy những gì chúng ta có thể làm là đặt tất cả các bit trở lại 0 và thao tác phần số mũ:

  ┏━━▶ This bit is implicit and persistent.
  ┃        
  1 . 1111 ---- 1111  *  2^52      =>  1  1111 ---- 1111. 
     |-- 52 bits --|                     |-- 52 bits --|

                          (+1)

  1 . 0000 ---- 0000  *  2^52 * 2  =>  1  0000 ---- 0000. * 2  
     |-- 52 bits --|                     |-- 52 bits --|
                                      (By consuming the 2^52, radix
                                       point has no way to go, but
                                       there is still one 2 left in
                                       exponent part)
  =>  1 . 0000 ---- 0000  *  2^53 
         |-- 52 bits --| 

Bây giờ chúng tôi nhận được 9,007,199,254,740,992 và đối với các số lớn hơn nó, định dạng chỉ có thể xử lý mức tăng 2 vì mỗi lần tăng 1 trên phần phân số kết thúc được nhân với phần 2 bên trái trong phần số mũ. Đó là lý do tại sao định dạng nhị phân 64 bit có độ chính xác kép không thể giữ các số lẻ khi số lớn hơn 9,007,199,254,740,992:9,007,199,254,740,992, and for the numbers greater than it, the format can only handle increments of 2 because every increment of 1 on the fraction part ends up being multiplied by the left 2 in the exponent part. That's why double-precision 64-bit binary format cannot hold odd numbers when the number is greater than 9,007,199,254,740,992:

                            (consume 2^52 to move radix point to the end)
  1 . 0000 ---- 0001  *  2^53  =>  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
1

Và 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 đó)

Hướng dẫn what is the largest possible number in javascript? - con số lớn nhất có thể trong javascript là bao nhiêu?

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.

JavaScript có thể xử lý JavaScript lớn như thế nào?

Trong JavaScript, loại số không thể biểu thị các giá trị số nguyên lớn hơn 253. Giới hạn này đã buộc các nhà phát triển phải sử dụng các cách giải quyết không hiệu quả và thư viện của bên thứ ba.Bigint là một loại dữ liệu mới nhằm sửa chữa điều đó.253. This limitation has forced developers to use inefficient workarounds and third-party libraries. BigInt is a new data type intended to fix that.

Giá trị tối đa của int là gì?

Giới hạn trên hằng số nguyên.

Giá trị tối đa dài trong Java là gì?

Long: Kiểu dữ liệu dài là số nguyên bổ sung của hai bit.Dài có chữ ký có giá trị tối thiểu là -263 và giá trị tối đa là 263-1.Trong Java SE 8 trở lên, bạn có thể sử dụng kiểu dữ liệu dài để biểu thị dài 64 bit không dấu, có giá trị tối thiểu là 0 và giá trị tối đa là 264-1.63 and a maximum value of 263-1. In Java SE 8 and later, you can use the long data type to represent an unsigned 64-bit long, which has a minimum value of 0 and a maximum value of 264-1.

Số nào là 1.7976931348623157 E 308?

Giới hạn số.