Có hợp lý không khi cho rằng bất kỳ đại lượng vật lý nào cũng có thể được biểu diễn bằng số nguyên 64 bit mà không bị tràn hoặc tràn?


31

Thuật toán tìm kiếm nhị phân ban đầu trong JDK đã sử dụng số nguyên 32 bit và có lỗi tràn nếu (low + high) > INT_MAX( http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-gầnly.html ) .

Nếu chúng ta viết lại cùng một thuật toán tìm kiếm nhị phân bằng cách sử dụng các số nguyên 64 bit (đã ký), chúng ta có thể cho rằng low + highsẽ không bao giờ vượt quá INT64_MAX vì về mặt vật lý không thể có 10 ^ 18 byte bộ nhớ?

Khi sử dụng số nguyên 64 bit (đã ký) để biểu diễn các đại lượng vật lý , có hợp lý không khi giả sử tràn và tràn không thể xảy ra?


4
Nhìn vào bất kỳ hiện tượng vật lý nào có số vô tỷ liên quan. Vòng tròn và pi chẳng hạn. Số dấu phẩy động vốn đã hợp lý, do đó bạn không thể biểu diễn nó một cách hoàn hảo mà không có lỗi.
Thomas Eding

92
Số lượng nguyên tử trong mặt trời xấp xỉ 1,2e57, phù hợp với số nguyên không dấu 190 bit. Do mâu thuẫn, 64 bit không thể đủ lớn để thể hiện bất kỳ đại lượng vật lý nào.

6
Tiêu đề câu hỏi của bạn là sai lệch. Bạn nên hỏi "có số lượng nào mà người ta có thể mong đợi một ứng dụng sử dụng một mảng được sắp xếp có kích thước lớn hơn 2 ^ 64 không?"
Doc Brown

7
hoặc số lượng yoctos giây kể từ khi bạn bắt đầu đọc bình luận này.
Jodrell

4
Đã có lúc mọi người nghĩ rằng sẽ không bao giờ có 2 ^ 32 máy tính được kết nối với nhau. Bạn không muốn các nguyên tử của bạn phải sử dụng NAT, phải không?
lúc 22 giờ

Câu trả lời:


58

Câu trả lời ngắn gọn là không. Tuy nhiên, đối với một số ứng dụng, giả định của bạn có thể đúng.

Giả sử một int đã ký, 2 ^ 63, với dấu phẩy được thêm vào cho rõ ràng, = 9.223.372.036.854.775.808. Vì vậy, đó là khoảng 9 * 10 ^ 18. 10 ^ 18 là một "Exa".

Wikipedia cho biết "Tính đến năm 2013, World Wide Web ước tính đã đạt tới 4 zettabyte. [12]", tức là 4000 Exabyte. Do đó, WWW lớn hơn khoảng 400 lần so với 2 ^ 63 byte.

Do đó, có ít nhất một đại lượng vật lý lớn hơn nhiều so với số nguyên 64 bit đã ký (hoặc không dấu). Giả sử rằng các đơn vị của bạn là byte . Nếu các đơn vị của bạn là một cái gì đó lớn hơn nhiều, như GigaBytes, thì bạn sẽ ổn, nhưng độ chính xác đo lường của bạn sẽ thấp.

Đối với một ví dụ khác, hãy xem xét các thiên hà ở xa. Thiên hà Andromeda thực sự là một trong những thiên hà gần gũi và cách đó 2,5 * 10 ^ 6 năm ánh sáng. Nếu đơn vị của bạn là dặm , đó sẽ là 14,5 * 10 ^ 18, hơn một số nguyên ký 64 bit. Bây giờ, rõ ràng nó phụ thuộc vào đơn vị bạn sử dụng cho các phép đo của mình, nhưng một số thiên hà còn cách xa hơn Andromeda. ( Cách xa nhất được biết là 13 * 10 ^ 9 LY. ) Tùy thuộc vào độ chính xác bạn muốn cho phép đo của mình, nó có thể vượt quá số nguyên 64 bit.

( Added ) Có, dặm là một đơn vị tệ hại cho khoảng cách thiên văn. Một đơn vị bình thường hơn có thể là một đơn vị thiên văn , khoảng 93 triệu dặm. Sử dụng đơn vị đo lường đó, thiên hà xa nhất được biết đến là khoảng 10 ^ 15 AU (nếu toán của tôi đúng), sẽ phù hợp với int 64 bit. Tuy nhiên, nếu bạn cũng muốn đo khoảng cách tới Mặt trăng, đến các vệ tinh quay quanh quỹ đạo gần đó, đơn vị đó quá lớn.

Thêm một ví dụ từ điện tử: Farad (F), một đơn vị điện dung . Tụ điện lớn lên đến 5kF. Và con số này có thể sẽ tăng theo thời gian khi những chiếc xe hybrid, "lưới điện thông minh", v.v ... được cải thiện. Một lần có thể đo điện dung nhỏ bằng 10 ^ -18 F. Vì vậy, phạm vi tổng thể trong điện dung "thực" mà chúng ta có thể đo ngày nay là 5 * 10 ^ 21, lớn hơn số nguyên 64 bit.


3
Tất cả điều này là đúng, nhưng trên quan điểm thực tế chúng ta có thể đặt câu hỏi về điểm đo khoảng cách thiên hà Andromeda từ thiên hà Milky Way trong dặm (nơi chính xác là những điểm tham chiếu?) Hoặc toàn bộ WWW theo byte (ít chính xác này, nó thay đổi mỗi mili giây)
Jivan

45
@Jivan Trên quan điểm thực tế tôi có thể thấy không có lý do tại sao bạn cần phải giải quyết hơn 640kB bộ nhớ. Chắc chắn nó nhiều hơn bạn sẽ CẦN.
ArTs

2
Một nhược điểm để đo khoảng cách thiên văn trong dặm: Bạn chịu trách nhiệm để thwapped với một con mèo.
Williham Totland

2
@Jivan Điểm tốt. Điều đó làm tôi nhớ đến Richard Feynman ca ngợi về sự điên cuồng của việc tổng hợp nhiệt độ của một nhóm các ngôi sao. Tôi thấy lý do tại sao bạn muốn trung bình, tối thiểu, tối đa, nhưng tổng? Ý nghĩa vật lý đó là gì?
piojo 24/2/2015

6
@piojo - Phải thừa nhận rằng số tiền này có ích khi tính toán giá trị trung bình.
Scott Whitlock

20

Bạn thậm chí không cần phải đi vũ trụ khi có sự tham gia của tổ hợp. Có 2 ^ 95 giao dịch có thể có trong một trò chơi cầu nối và đó là khía cạnh nhỏ của sự phức tạp.


Người ta có thể tự hỏi nếu điều đó được tính là "đại lượng vật lý".
Paul Draper

2
Mặt khác, tổ hợp liên quan đến hóa học hoặc toán học sẽ đủ điều kiện là "vật lý".
rwong

@PaulDraper nếu bạn có đủ bộ bài để bố trí trên mặt đất thì tất cả những giao dịch đó sẽ là vật lý. Sau đó, bạn thậm chí có hơn 2 ^ 95 thẻ tham gia.
Brad

1
@Brad, tôi nghĩ OP đang yêu cầu một số lượng "tồn tại" (được thôi, sự tồn tại là một khái niệm mờ nhạt). 2 ^ 95 thẻ thỏa mãn một khái niệm toán học không tồn tại (gọi Guinness nếu có). Thật khó để nói những gì "tính" và những gì không. Câu trả lời này không thỏa mãn khái niệm yếu đuối của tôi về một đại lượng vật lý.
Paul Draper

17

Số lượng vật lý phù hợp nhất cho câu hỏi của bạn là RAM máy tính .

Windows Server 2012 hỗ trợ tới 4 TB bộ nhớ vật lý. Đó là 2 42 byte. Nếu dung lượng RAM tiếp tục tăng gấp đôi sau mỗi năm, thì chỉ sau 17 năm nữa, "Windows Server 2032" sẽ hỗ trợ 2 62 byte bộ nhớ vật lý, tại thời điểm đó, bạn low + highsẽ đạt 2 63 - 2 và hôn số nguyên 64 bit được ký tối đa.

Tôi hy vọng không có hệ thống quan trọng nào về an toàn thất bại, giả sử 64 bit sẽ luôn là đủ.

Để sử dụng chung hơn một chút, đại lượng vật lý phù hợp nhất là không gian địa chỉ bộ nhớ . (Thật hữu ích khi có không gian địa chỉ lớn hơn nhiều so với bộ nhớ vật lý, ví dụ: đặt nhiều ngăn xếp trong bộ nhớ, tất cả đều có chỗ để phát triển.) Việc triển khai x86-64 hiện tại hỗ trợ địa chỉ ảo 48 bit, vì vậy chúng tôi chỉ còn 14 năm trước khi các CPU này đạt giới hạn không gian địa chỉ 2 62 byte.

Và sau đó có bộ nhớ chia sẻ "nơi mà các bộ nhớ (riêng biệt) có thể được xử lý như một không gian địa chỉ (được chia sẻ hợp lý)".


4
+1 Câu trả lời của bạn gần như chính xác, ngoại trừ một số loại phần mềm hiện nay đã gặp phải các địa chỉ bộ nhớ trong phạm vi 0xFFFFFFFFxxxxxxxx(ví dụ: nửa cao hơn ), ví dụ như trình điều khiển thiết bị hoặc hệ điều hành.
rwong 24/2/2015

2
@SiqiLin có lẽ không liên quan đến điện toán cá nhân. Tuy nhiên, bộ nhớ chia sẻ phân tán, hoặc DGAS (được đề cập trong bài viết) là có thật; siêu máy tính đã hoạt động theo phong cách đó trong nhiều năm và có thể nó sẽ trở thành chuẩn mực cho cơ sở hạ tầng điện toán đám mây đa quốc gia. Rõ ràng, mã phần mềm điển hình được viết bởi lập trình viên điển hình sẽ không chạy trong môi trường như vậy - môi trường bất thường chạy phần mềm bất thường (tức là cơ sở hạ tầng). Nhưng một bộ phận độc giả P.SE có thể sẽ tiếp tục theo dõi sự nghiệp như vậy; chỉ trong trường hợp
rwong 24/2/2015

1
@Joshua: Với công nghệ hiện tại (32 GB DDR4) sẽ là 7m hoặc 23 ns cho ánh sáng để di chuyển, có vẻ hoàn toàn phù hợp với độ trễ CAS hiện đại. Nếu bạn đẩy nó lên cực trị nguyên lý của Landauer, với mật độ silicon, bạn sẽ có được 31nm hoặc 10 ^ -16 giây cho giới hạn vật lý. Điều đó dường như không quá điên rồ ... tốt, có lẽ chỉ một chút thôi.
Charles

3
@Joshua Đó là một giới hạn công nghệ, không phải là một giới hạn vật lý. (Như trong, vấn đề là chúng ta không biết cách thực hiện nó, chứ không phải một số luật vật lý cấm nó.) Vì vậy, trong khi có liên quan trong tuần này, nó có thể thay đổi bất cứ lúc nào với một bước đột phá mới. 60 năm trước, mọi người sẽ đưa ra nhận xét rất giống với bạn, khoảng 50 kilobyte bộ nhớ được coi là RAM, với lý do cuộn dây quấn bằng tay sau đó được sử dụng như một phần của lõi bộ nhớ không chỉ có thể chỉ nhỏ và còn chức năng, nhưng không gian cần thiết giữa chúng để tránh nhiễu xuyên âm EM.
Matthew Najmon

2
Tôi nhớ khi 24 bit không gian địa chỉ (16 megabyte) nhiều hơn bất kỳ ai cần - hoặc có thể đủ khả năng. :-)
Bob Jarvis - Tái lập Monica

10

Có hợp lý không khi cho rằng bất kỳ đại lượng vật lý nào cũng có thể được biểu diễn bằng số nguyên 64 bit mà không bị tràn hoặc tràn?

Không chính xác. Có rất nhiều số lớn hơn và nhỏ hơn số đó, đó là lý do tại sao chúng ta có số dấu phẩy động. Số dấu phẩy động đánh đổi độ chính xác thấp hơn cho phạm vi tốt hơn.

Trong ví dụ cụ thể mà bạn đã trích dẫn, rất khó có khả năng bạn sẽ cần một số lớn hơn số đó. 64 bit tương ứng với khoảng 18 triệu phần tử. Nhưng không bao giờ nói không bao giờ.


7

Giả định của bạn sẽ không xử lý các đại lượng vật lý chỉ có thể được biểu thị bằng số dấu phẩy động. Và ngay cả khi bạn quyết định chia tỷ lệ tất cả các số, giả sử bằng cách nhân tất cả các số với 10000 (vì vậy các giá trị vẫn là số nguyên nhưng có thể được biểu thị bằng mười phần nghìn), sơ đồ này vẫn thất bại đối với các số rất gần với 0, ví dụ như khối lượng electron (9,1094 * 10⎻³¹ kg).

Đó là một đại lượng vật lý rất thực (và cực kỳ nhỏ) , đây là một số điều nữa bạn sẽ gặp rắc rối. Và nếu bạn cho rằng đó không phải là một đại lượng vật lý thực sự (mặc dù nó tính bằng kg), hãy xem xét:

10 kg (obviously physical quantity)
1 kg (same)
10⎻² kg (1/100 kg, or about 1/3 ounce) (also quite real)

Vì vậy, bạn thấy nơi tôi đang đi với điều này. Điều cuối cùng bạn không thể xử lý.

Tất nhiên, bạn có thể có một trường đặc biệt trong số để chia tỷ lệ một phần nguyên lên hoặc xuống theo cấp số nhân; gee bây giờ bạn chỉ cần phát minh ra điểm nổi.


1
Nhưng bạn có thể gán giá trị vật lý tối thiểu (IIRC, đối với khối lượng, nó là khối lượng tương đương với 1 electron-volt). Ví dụ: bạn có thể đo chiều dài vũ trụ bằng cách sử dụng đơn vị độ dài Planck với (IIRC) 200 chữ số. Bạn có thể nói về mặt tinh thần khoảng 1/10 chiều dài Planck, nhưng về mặt thể chất thì nó không có ý nghĩa gì.
SJuan76

Bạn không có nghĩa là chia cho 10000? Nhân với 10000 sẽ chỉ làm cho giả định từ công cụ mở luồng có nhiều khả năng thất bại. Ngoài ra, có thể thiết bị của tôi không hiển thị chính xác khối lượng điện tử nhưng nó phải là 10 ^ -31
Mike

Tôi có nghĩa là nhân với 10000. Nếu bạn muốn lưu trữ 1,0001 dưới dạng số nguyên, bạn cần nhân nó với 10000 trước khi lưu trữ thành 10001. Tôi đã sử dụng các ký tự siêu ký tự cho -31, có thể chúng không hiển thị chính xác trên tất cả các trình duyệt . Nhìn ổn trong Firefox.
tcrosley 24/2/2015

@ SJuan76 Có một cái gì đó gọi là chứng minh tương lai. Vào năm 1850, chúng ta có thể nói về một đơn vị 10 ^ -20 mét (nhỏ hơn rất nhiều so với một nguyên tử, nhưng vẫn lớn hơn rất nhiều so với chiều dài Planck), nhưng về mặt vật lý, làm như vậy không có ý nghĩa gì. Sau đó mọi người tìm ra cấu trúc bên trong của một nguyên tử. Chắc chắn, các quark trông có vẻ cơ bản, nhưng tất cả những gì chúng ta thực sự có thể nói là (a) chúng hành động theo cách phù hợp với cách chúng ta mong đợi các hạt cơ bản hoạt động, và (b) chúng ta chưa tìm thấy một con rùa tiếp theo. Vào năm 1850, chúng ta có thể nói hai điều tương tự về các nguyên tử. Nếu chúng ta tìm thấy một con rùa tiếp theo, các đơn vị 1/10 Planck trở nên khá hữu ích.
Matthew Najmon

Đó là một quan niệm sai lầm phổ biến rằng không gian hoặc thời gian được lượng tử hóa trong các đơn vị Planck! Bạn không thể đại diện cho vũ trụ bằng một mảng 4 chiều, ít nhất là không phải trong các lý thuyết hiện tại ... Vì vậy, các phân số về độ dài Planck ý nghĩa vật lý (nhưng kết quả xuất phát từ Thuyết tương đối rộng và / hoặc QM bắt đầu nổ tung hoặc mâu thuẫn với nhau).
yatima2975

5

Đầu tiên tôi sẽ trả lời câu hỏi những giá trị vật lý nào có thể / nên được biểu thị bằng một số nguyên?

Số nguyên là một đại diện của một số tự nhiên (và sự khác biệt giữa chúng) trong một hệ thống máy tính, vì vậy áp dụng nó cho bất cứ điều gì khác là sai. Do đó, việc gọi khoảng cách hoặc các đại lượng khác thuộc về miền liên tục không phải là một đối số. Đối với số lượng như vậy có đại diện số thực. Và bạn luôn có thể chọn một đơn vị cực kỳ lớn và phù hợp với bất kỳ giá trị nào với độ chính xác nhất định.

Vì vậy, các giá trị vật lý là số tự nhiên là gì và chúng có thể vượt quá số nguyên 64 bit không?

Tôi có thể nghĩ về hai. Số lượng vật thể (như nguyên tử) và mức năng lượng mà một hệ lượng tử có thể có. Đó là hai thứ có số nguyên hoàn toàn. Bây giờ, tôi biết bạn có thể tách một nguyên tử, nhưng nó vẫn tạo ra một số nguyên và bạn không thể chia nó vô thời hạn. Cả hai đều có thể dễ dàng vượt qua phạm vi 64 bit của số nguyên không dấu . Số lượng nguyên tử cao hơn và một nguyên tử có thể ở nhiều trạng thái năng lượng.

Cho dù thông tin là vật lý hay không, là rất tranh cãi. Tôi sẽ nói là không. Do đó, tôi sẽ không nói lượng thông tin là một thứ vật chất. Vì vậy, không phải là dung lượng RAM hoặc bất cứ thứ gì như vậy. Nếu bạn cho phép điều này, thì số nguyên tử dễ dàng vượt qua con số này, bởi vì bạn cần nhiều hơn một nguyên tử để lưu trữ một bit với công nghệ ngày nay.


Tập N của số tự nhiên chỉ bao gồm các số nguyên không âm. Tôi biết ý của bạn là gì, nhưng "số tự nhiên" có một định nghĩa toán học cụ thể không phù hợp với cách bạn đang sử dụng nó.

Tôi không thực sự chắc chắn. Các kiểu số nguyên biểu thị các số tự nhiên (trong một phạm vi nhất định, tất nhiên được ngụ ý). Điều đó có đúng không? Tôi nghĩ rằng bạn giả sử tôi ngụ ý bình đẳng giữa các bộ. Điều này không đúng, bất kỳ số tự nhiên nào cũng có thể được biểu diễn bằng một số nguyên. Xin lưu ý rằng tôi cũng nói sự khác biệt giữa chúng. Tôi không cảm thấy muốn đăng nhập / không dấu là cần thiết. Loại hát chỉ cần thiết khi bạn đối phó với sự khác biệt.
luk32

Trong khi tính vật lý của thông tin được lưu trữ là điều gây tranh cãi, và một câu hỏi cho các nhà triết học hơn là cho các nhà vật lý, thì tính vật lý của các cơ chế mà nó được lưu trữ là khá chắc chắn. Do đó, trong khi khả năng áp dụng cho một số bit thông tin là đáng nghi ngờ, thì số bit có giá trị của chip RAM lại không.
Matthew Najmon

@MatthewNajmon Tất nhiên, tôi đồng ý, đó là lý do tại sao tôi để lại câu cuối cùng. Số lượng bit của chip RAM sẽ thấp hơn số lượng nguyên tử trong một thời gian khá lâu, vì vậy bạn có thể sử dụng số bit sau. Nói cách khác tại sao sử dụng số bit, khi bạn có thể sử dụng số lượng nguyên tử của cùng một chip RAM? Hiện tại một chút thông tin được thể hiện bằng trạng thái có hệ thống vật lý, vì vậy bạn có thể lưu trữ nhiều hơn một bit trên mỗi nguyên tử, nhưng ngày nay nó không được áp dụng và tôi vẫn không thấy nó có thể nhiều hơn số lượng trạng thái lượng tử của hệ thống như vậy. Nhưng tôi hoàn toàn đồng ý với tiền đề của bạn.
luk32

4

Ngoài câu trả lời của Jerry101, tôi muốn cung cấp bài kiểm tra rất đơn giản và thực tế này cho chính xác:

Giả sử bạn phân bổ một số bộ nhớ thông qua malloc, trong HĐH 64 bit. Giả sử bộ cấp phát bộ nhớ quyết định trả lại cho bạn một khối bộ nhớ hợp lệ, có kích thước bạn yêu cầu, nhưng nơi đặt bit thứ 63.

Nói cách khác, giả sử tồn tại một số môi trường lập trình trong đó 0xFFFFFFFFxxxxxxxxcác phạm vi bộ nhớ hợp pháp có thể được trả về từ một cuộc gọi đến malloc.

Câu hỏi là, mã của bạn sẽ vẫn hoạt động như dự định chứ?

Khi tình huống tương tự xảy ra với các hệ điều hành 32 bit, một số phần mềm không hoạt động chính xác nếu chúng được cung cấp địa chỉ bộ nhớ "ở nửa trên". Ban đầu, các địa chỉ bộ nhớ như vậy được cho là chỉ dành cho mã đặc quyền (hệ điều hành, trình điều khiển thiết bị và phần cứng ngoại vi), nhưng vì sự khủng hoảng không gian địa chỉ 32 bit, các nhà cung cấp hệ điều hành đã quyết định cung cấp một phần không gian dành riêng đó cho các ứng dụng yêu cầu nó.

May mắn thay, tình huống này khá khó xảy ra đối với các chương trình 64 bit trong một thời gian, ít nhất là không trong một thập kỷ.

Khi tình huống đó cuối cùng xảy ra, điều đó có nghĩa là bộ xử lý và hệ điều hành có địa chỉ 128 bit sẽ trở thành xu hướng vào thời điểm đó và họ có thể cung cấp "môi trường mô phỏng 64 bit" để cho phép các "ứng dụng cũ" này hoạt động theo các giả định tương tự như các hệ điều hành 64 bit ngày nay.

Cuối cùng, lưu ý rằng cuộc thảo luận này chỉ tập trung vào các địa chỉ bộ nhớ. Một vấn đề tương tự với dấu thời gian phải được thực hiện với sự đề phòng nhiều hơn, bởi vì các định dạng dấu thời gian nhất định phân bổ rất nhiều bit chính xác cho micro giây, và do đó để lại ít bit hơn để biểu thị thời gian trong tương lai. Những vấn đề này được tóm tắt trong bài viết Wikipedia về vấn đề Năm 2038 .


4

Đây là một câu hỏi bạn cần hỏi trên cơ sở từng trường hợp. Bạn không nên sử dụng một giả định chung rằng số học 64 bit sẽ không tràn, bởi vì ngay cả khi số lượng chính xác sẽ ở trong phạm vi nhỏ hơn nhiều, một nguồn dữ liệu độc hại cuối cùng có thể cung cấp cho bạn số lượng không hợp lý có thể tràn ra và tốt hơn là nên chuẩn bị cho tình huống này hơn là bị nó tấn công bất ngờ.

Có một số trường hợp có ý nghĩa khi viết mã phụ thuộc vào việc không tràn các số 64 bit. Lớp ví dụ chính mà tôi biết là các bộ đếm, trong đó bộ đếm được tăng lên mỗi khi nó được sử dụng. Ngay cả với tốc độ một lần tăng trên mỗi nano giây (không thực tế), sẽ mất hơn một thế kỷ để tràn.

Lưu ý rằng trong khi nó ở có vẻ đầu tiên "luôn luôn sai về nguyên tắc" phải dựa vào "thời gian cho đến khi thất bại" về tính chính xác của một hệ thống, chúng tôi làm điều này tất cả các thời gian với xác thực / đăng nhập. Cho đủ thời gian (đối với cưỡng bức), bất kỳ hệ thống nào như vậy (cho dù dựa trên mật khẩu, khóa riêng, mã thông báo phiên, v.v.) đều bị hỏng.


2

Có phải POSSIBLE cho một đại lượng vật lý không vừa với 64 bit không? Tất nhiên. Những người khác đã chỉ ra việc đếm số lượng nguyên tử trong mặt trời hoặc số milimet cho thiên hà tiếp theo. Việc các trường hợp như vậy có liên quan đến ứng dụng của bạn hay không phụ thuộc vào ứng dụng của bạn là gì. Nếu bạn đang đếm số lượng vật phẩm trong bất kỳ thùng nào trong kho của mình, 16 bit có thể là đủ. Nếu bạn đang tổng hợp số liệu thống kê về số lượng người trên thế giới đáp ứng các điều kiện khác nhau, bạn cần có khả năng ghi lại hàng tỷ, vì vậy bạn sẽ cần nhiều hơn 32 bit, tại thời điểm đó, có lẽ bạn sẽ đến 64 (ít máy tính có hỗ trợ tích hợp cho số 37 bit, v.v.). Nếu đây là một ứng dụng hóa học đếm số mol nguyên tử, thì 64 bit sẽ không đủ.

Về mặt kỹ thuật, chỉ vì ngày nay không có máy tính nào có 2 ^ 64 byte bộ nhớ không nhất thiết có nghĩa là một chỉ số mảng không bao giờ có thể nhiều hơn 2 ^ 64. Có một khái niệm gọi là "mảng thưa thớt" trong đó nhiều phần tử của mảng không được lưu trữ ở bất kỳ đâu và các giá trị không được bảo vệ như vậy được giả sử có một số giá trị mặc định như null hoặc zero. Nhưng tôi cho rằng nếu bạn đang viết một hàm để tìm kiếm một mảng hoặc danh sách một loại nào đó, và kích thước của trường bạn đang sử dụng để giữ chỉ mục vào mảng lớn hơn gấp đôi địa chỉ lớn nhất có thể, sau đó kiểm tra xem có tràn không thêm hai chỉ mục sẽ không thực sự cần thiết.


Điểm tốt về mảng thưa thớt. Ngoài ra, ngay cả với một mảng được điền đầy đủ, vẫn hoàn toàn có thể, mặc dù khá chậm và trong một số trường hợp khá cần thiết, để làm việc với một mảng quá lớn để phù hợp với toàn bộ mảng trong RAM cùng một lúc. Điều này được thực hiện đơn giản bằng cách lưu trữ toàn bộ mọi thứ trong một phương tiện chậm hơn nhưng lớn hơn nhiều, chẳng hạn như ổ cứng, sau đó kéo vào RAM chỉ một vài yếu tố bạn đang làm việc tại thời điểm này. Ngay cả một HDD nhỏ là đủ lớn để chứa một mảng nhiều lớn hơn so với OP đang muốn giả.
Matthew Najmon

0

Thật vô lý khi giả sử một số nguyên 64 bit có thể chứa tất cả các số. Nhiều lý do:

  1. Số nguyên 64 bit tối đa và tối thiểu là số hữu hạn. Đối với mỗi số hữu hạn, một số hữu hạn lớn hơn và nhỏ hơn tồn tại.

  2. Tính toán với số 128 bit và 256 bit hiện đang được sử dụng ở nhiều nơi. Nhiều bộ xử lý có các hướng dẫn cụ thể hoạt động trên số nguyên 128 bit.

  3. 20 năm trước, đĩa 1 GB được coi là "lớn". Ngày nay, đĩa 1 TB được coi là nhỏ. 20 năm trước máy tính để bàn trung bình có khoảng 16 MB RAM. Máy tính để bàn hiện tại của tôi có hơn 16 GB RAM. Không gian ổ cứng và RAM đã tăng theo cấp số nhân trong quá khứ và được dự đoán sẽ tăng theo cấp số nhân trong tương lai. Trừ khi ai đó có thể đưa ra một lý do rất chính đáng tại sao nó nên ngừng phát triển, không có nghĩa gì khi cho rằng nó sẽ dừng lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.