Đó là tính toán nhanh hơn,


10

Đó là tính toán nhanh hơn, hoặc đăng nhập một c hoặc b ablogac ? a,bclà các số thực dương vớib>1.cbabcb>1

Những loại thuật toán bạn sẽ sử dụng trong so sánh? Sự phức tạp của họ là gì?

Ví dụ, khi hoặc c một bcabcab

Câu hỏi này được lấy cảm hứng từ các bình luận về câu hỏi trao đổi ngăn xếp Toán học Mục đích của sự gần đúng của Stirling đối với một nhân tố là gì? . Đặc biệt, những bình luận để lại bởi mjqxxxx , Thomas Andrew và tôi.


Người điều hành cũng có thể, rõ ràng chấp thuận các chỉnh sửa. Tôi đồng ý với đề xuất của @ MarkBooth và đã kết hợp nó vào câu hỏi như anh ấy đề xuất.
Aron Ahmadia

Hãy dọn dẹp (xóa) ý kiến ​​ngay bây giờ họ đã phục vụ mục đích của họ. * 8 ')
Đánh dấu gian hàng

Câu trả lời:


8

Xem câu trả lời của tôi cho câu hỏi này cho một số vấn đề liên quan.

Nói chung, máy tính chỉ có thể cộng, trừ, nhân, chia và dịch chuyển bit. Vì lợi ích của đối số, chúng ta hãy giả sử rằng bạn không tính toán trong trường hợp đặc biệt, nếu một là một sức mạnh của 2 và b là một số tự nhiên, bởi vì trường hợp đó làm giảm tới một sự thay đổi chút, và do đó dễ dàng.abab

Nếu là số tự nhiên, và bạn muốn tính toán một b , bạn có thể sử dụng bổ sung chuỗi lũy thừa . Mọi trường hợp khác trong câu hỏi của bạn đều khó (nói chung).bab

Một số thuật toán nhanh được sử dụng để ước tính các hàm này với độ chính xác cao đòi hỏi ma thuật đen. Để xem ý của tôi về "ma thuật đen", hãy xem bài đăng trên blog này của Martin Ankerl và một bài báo liên quan mà anh ta liên kết đến trong Tính toán thần kinh . Cũng xem thuật toán CORDIC .

Các loại thủ thuật lật bit tương tự được giải thích trong Hacker Delight (liên kết là trang web đồng hành của cuốn sách).

Các cách khác để tính xấp xỉ tốt sử dụng phân tích số (xem bài viết Wikipedia về Lý thuyết xấp xỉ ). Một cách tồi để làm điều đó là xây dựng một phương trình vi phân thích hợp và tích hợp nó bằng phương pháp số như phương pháp Euler (như tôi đã nói, một xấp xỉ xấu, nhưng bạn có thể làm được). Một cách tốt hơn để làm điều đó là sử dụng xấp xỉ hàng loạt. Sê-ri Taylor hội tụ quá chậm, do đó, một cái gì đó giống như xấp xỉ Padé hoặc một loại xấp xỉ chuỗi hội tụ nhanh khác có thể được sử dụng thay thế (các xấp xỉ hợp lý khác, sê-ri Ch Quashev, v.v.).

Thuật toán bạn sử dụng để tính gần đúng các chức năng trên sẽ phụ thuộc vào kiến ​​trúc, yêu cầu tốc độ và yêu cầu độ chính xác của bạn.

Vấn đề khi nói về độ phức tạp là bất kỳ thuật toán nào sẽ chỉ tính toán xấp xỉ điểm trôi nổi của các hàm bạn đề cập, vì vậy thời gian chạy chắc chắn sẽ phụ thuộc vào độ chính xác mà bạn yêu cầu về xấp xỉ của bạn. Ngay cả khi tính đến điều đó, tôi không nghĩ rằng độ phức tạp tính toán là một xấp xỉ đầu tiên tốt về hiệu suất; kích thước của các đầu vào của bạn sẽ được đo bằng bit (nghĩa là số bit cần để đại diện cho , bcabc), sẽ phụ thuộc vào độ chính xác, thay vì phụ thuộc vào độ lớn của chính các đầu vào số. Đối với các mục đích thực tế, độ chính xác của biểu diễn số của các con số sẽ không thay đổi nhiều (độ chính xác đơn, độ chính xác kép, độ chính xác bốn) và bạn thường không quyết định sử dụng độ chính xác đó dựa trên bất kỳ ước tính độ phức tạp tính toán nào của các hàm vô hướng . Số liệu phù hợp nhất là thời gian đồng hồ treo tường và trừ khi bạn đang sử dụng một kiến ​​trúc đặc biệt (hệ thống nhúng) hoặc ứng dụng của bạn thực sự đòi hỏi số mũ nhanh (xem liên kết bài đăng trên blog và liên kết Tính toán thần kinh ở trên), các thư viện nội tại trong ngôn ngữ của sự lựa chọn có lẽ là tốt


4

Đây là một tốt câu hỏi vì các thuật toán số hiểu biết và hiệu suất là một điều kiện tiên quyết quan trọng để trở thành một nhà khoa học tính toán hiệu quả. Đồng thời, đó là một câu hỏi kém vì các ràng buộc như đặt ra không đủ điều kiện để đưa ra một câu trả lời có ý nghĩa.

Hiệu suất của ba tính toán sẽ phụ thuộc mạnh mẽ vào độ chính xác cần thiết trong kết quả cuối cùng cũng như độ chính xác tối thiểu cần thiết để biểu diễn các toán hạng. Bạn đủ điều kiện , bc là số thực dương, nhưng chúng tôi cũng cần biết có bao nhiêu chữ số nhị phân d n được yêu cầu để thể hiện chúng một cách chính xác. Để hiểu các cân nhắc về hiệu suất cho các số thực chung, trước tiên chúng ta cần hiểu cách máy tính biểu diễn các số nguyên cũng như cách nó xấp xỉ các số thực bằng cách sử dụng các số có dấu phẩy động.abcdn

Khi máy tính hoạt động trên một số nguyên , thì số chữ số nhị phân cần thiết rõ ràng bằng với nhật ký 2 về độ lớn của số nguyên, cộng thêm một bit để xử lý dấu:M2

log 2 | M | + 1dn=2|M|+1

Ví dụ, số -8 có thể được biểu diễn bằng 4 chữ số nhị phân. Đối với hiệu suất và hiệu quả không gian, các đơn vị logic số học (ALU), chịu trách nhiệm tính toán số nguyên trên các đơn vị xử lý hiện đại, được thiết kế để xử lý toán học trên các số nguyên lên đến một số kích thước cố định, phổ biến nhất hiện nay là d = 32 và d = 64. Không chỉ bộ xử lý x86 như trong máy tính của bạn có ALU, chúng là một khối xây dựng cơ bản của kiến ​​trúc máy tính có mặt khắp nơi trong xã hội điện tử ngày nay. Nếu bạn đã quen thuộc với bảng điều khiển trò chơi video, bạn có thể nhớ Nintendo 64, một hệ thống trò chơi video được đặt tên theo kích thước (tính bằng bit), các đơn vị logic số học trên bộ xử lý của giao diện điều khiển được thiết kế để xử lý.

Các phép cộng, phép trừ và phép nhân số nguyên trên các đơn vị logic số học rất hiệu quả và thường không yêu cầu quá nhiều chu kỳ để tính toán. Các bộ phận ít hiệu suất hơn và trên các bộ xử lý hiện đại có thể cần tới vài chục chu kỳ. Hiệu suất phụ thuộc vào cả kiến ​​trúc của đơn vị xử lý (và việc thực hiện tương ứng của đơn vị logic số học) và tần số của nó. Lưu ý rằng bộ xử lý 64 bit thường có thể thực hiện số học trên các toán hạng -bit với cùng tốc độ cho x ở bất cứ đâu trong khoảng từ 1 đến 64.xx

nbb=2b=10sex sau đó được đại diện xấp xỉ là:

x=sbe

13dn.

Một lượng đáng kể nỗ lực trí tuệ trong 50 năm qua đã được đầu tư để cải thiện khả năng của bộ xử lý để tính toán các phép toán dấu phẩy động số học một cách hiệu quả. Trên các bộ xử lý hiện đại, các tính toán này được xử lý bởi một hoặc nhiều đơn vị Dấu phẩy động (FPU), một phiên bản tinh vi hơn của đơn vị logic số học được thiết kế để thực hiện các phép toán số học trên các số có dấu phẩy động và thường được thiết kế để xử lý cả 32 theo chỉ định của IEEE 754 -bit số dấu phẩy động (thường được gọi là 'số float') và số dấu phẩy động 64 bit (thường được gọi là 'nhân đôi') một cách hiệu quả. Tương tự như các đơn vị logic số học, các đơn vị dấu phẩy động thường có thể tính toán phép cộng, phép trừ và phép nhân chỉ trong một vài chu kỳ, trong khi phép chia thường đòi hỏi nhiều hơn một chút.

abc

  1. ab
  2. ac
  3. c1b

1 lũy thừa chung thường được thực hiện với danh tính sau:

ab=βalogβb

β2eβ=2abt=alog2b2t

FYL2X + F2XM1 + ~ 20 = 80 + 51 + ~ 20 = ~ 151 chu kỳ

2 Điều này có thể được chuyển đổi thành hai logarit và phân chia bằng cách thay đổi danh tính cơ sở và không cần thay đổi kích thước để có kết quả chính xác.

2 * FYL2X + FDIV = 2 * 80 + (7 đến 27) = 167 đến 187 chu kỳ

[3] Điều này tương đương với một phân chia theo sau là lũy thừa, vì vậy [1] cộng với FDIV, ~ 175 chu kỳ.


0

Hãy để tôi xem nếu tôi có thể diễn giải câu hỏi:

abloga(c)a

Trả lời : nó thực sự phụ thuộc vào việc c có phụ thuộc vào a hay không và cách so sánh với b (lớn hơn, nhỏ hơn hoặc bằng).

cba

cloga(c)=ln(c)/ln(a)loga(c)abaab=ω(loga(c))

c=abloga(ab)=bbabloga(c)ab=ω(loga(c))

cababc=Θ(ab)

loga(c)c1/b

abc

cc1/bbc1/b=o(loga(c))

c=abloga(c)=ac1/b=aloga(c)=Θ(c1/b)

cababc

c1/bab

cc1/babc1/b=o(ab)

c=abc1/b=ab>1abc1/b

abc


Tôi sẽ chia ý kiến ​​của tôi thành hai phần: phong cách và nội dung. Về mặt phong cách, tôi đánh giá cao rằng bạn đã bao gồm các phương trình trong bài viết của mình. Vui lòng định dạng lại chúng để sử dụng MathJax để chúng hiển thị độc đáo (ví dụ như trong câu hỏi đã đăng). Để tận dụng MathJax, hãy sử dụng ký hiệu LaTeX khi viết phương trình của bạn. Để biết sơ lược về viết toán trong LaTeX, hãy xem hướng dẫn này trong Wikibooks hoặc hướng dẫn ngắn này của Hiệp hội toán học Hoa Kỳ .
Geoff Oxberry

ablogca
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.