Nó không có ý nghĩa bởi vì những gì bạn đang cố gắng làm không tối ưu hóa quá trình kết quả !!!
Xin chào, tôi không đọc bất kỳ đâu trong câu hỏi của bạn mà bạn có ý định tối ưu hóa.
Điện Người không bao giờ ngừng tò mò bất kể "tính hữu ích". Chúng tôi giống như những người tích cực ám ảnh về những thứ mà bạn đọc trong tin tức nơi họ xếp gác gác, hầm, phòng ngủ và phòng khách với rác mà họ tin sẽ có ích trong một ngày. Ít nhất đó là trường hợp khi tôi ở trường Engg cách đây chưa đầy 30 năm. Tôi khuyến khích bạn tiếp tục tìm kiếm để tích trữ kiến thức "vô dụng" dường như có ít khả năng tối ưu hóa cuộc sống hoặc phong cách sống của bạn. Tại sao phụ thuộc vào trình biên dịch khi bạn có thể làm điều đó bằng thuật toán mã hóa bằng tay? Yah? Có một chút mạo hiểm, bạn biết đấy. Ok enuf giải tán những người bày tỏ thái độ khinh thị khi bạn theo đuổi kiến thức.
Hãy nhớ lại trường trung học của bạn, cách bạn được dạy làm bộ phận của bạn? 437/24, ví dụ:
_____
24|437
018
-----
24|437
24
-----
197
24
-----
5
Số thuộc phân chia, 437, được gọi là cổ tức. 24 là số chia, kết quả 18 là thương, và 5 là số dư. Giống như khi bạn nộp thuế, bạn cần phải điền vào lợi nhuận bạn đã nhận được từ cổ tức "cổ tức", vốn là một từ sai. Những gì bạn điền vào biểu mẫu thuế là một bội số của thương lượng của một phần lớn cổ tức. Bạn không nhận được cổ tức, nhưng phần cổ tức - nếu không, điều đó có nghĩa là bạn sở hữu 100% cổ phần.
___________
11000|110110101
000010010
-----------
11000|110110101
11000
----------
000110101 remainder=subtract divisor from dividend
11000000 shift divisor right and append 0 to quotient until
1100000 divisor is not greater than remainder.
110000 Yihaa!
----------
000101 remainder=subtract shifted divisor from remainder
11000 shift divisor right and append 0 to quotient until
1100 divisor is not greater than remainder.
----------
oops, cannot shift anymore.
Ở trên, như bạn đã biết, là phân chia TRUE. Điều này đạt được bằng cách trừ đi bằng ước số đã dịch chuyển.
Điều bạn muốn là đạt được điều tương tự bằng cách đơn giản là chuyển cổ tức. Điều đó, thật không may không thể được thực hiện trừ khi số chia là một lũy thừa lũy thừa của 2 (2,4,8,16). Đó là một thực tế rõ ràng về số học nhị phân. Hoặc, ít nhất tôi không nhận thức được bất kỳ phương pháp nào có thể làm điều đó mà không có các kỹ thuật xấp xỉ và intrapolative.
Vì vậy, bạn phải sử dụng kết hợp giữa thay đổi cổ tức và phân chia thực sự. ví dụ:
24 = 2 x 2 x 2 x 3
Thứ nhất, chia 437 8 sử dụng thay đổi nhị phân để có được 010.010 và sau đó sử dụng phân chia đúng chia cho 3:
010010
--------
11|110110
11
-------
011
11
-----
0
mà hoạt động ra vào 010010 = 18.
Voila.
Làm thế nào để bạn xác định 24 = 2^8 x 3?
Bằng cách chuyển 11000 sang phải cho đến khi bạn đạt mức 1.
Điều đó có nghĩa, bạn có thể thay đổi cổ tức cùng một số lần như bạn sẽ chuyển số chia cho đến khi số chia chạm một 1.
Do đó, rõ ràng, phương pháp này sẽ không hoạt động nếu số chia là lẻ. ví dụ, nó sẽ không hoạt động cho ước số 25, nhưng nó sẽ làm việc một chút cho ước số 50.
Có thể, có các phương pháp tiên đoán có thể nội suy số chia như 13 đến giữa 2^3 = 8 và 2^4 = 16. Nếu có, tôi không quen thuộc với họ.
Điều bạn cần khám phá là sử dụng chuỗi số.Ví dụ chia cho 25:
1 1 1 1 1
__ = __ - ___ - ___ + ___ - ... until the precision you require.
25 16 64 128 256
nơi dạng tổng quát của bộ truyện là
1 1 b1 bn
_ = ___ + _______ + ... + ______
D 2^k 2^(k+1) 2^(k+n)
nơi tỷ là một trong hai -1, 0 hoặc +1.
Tôi hy vọng thao tác nhị phân của tôi ở trên sẽ không có lỗi hoặc lỗi chính tả. Nếu vậy, hàng ngàn lời xin lỗi.
Tại sao? Đây có phải là một tối ưu hóa không? Bạn đang tối ưu hóa điều gì? Bạn có chắc nó cần được tối ưu hóa không? –
Điều gì khiến bạn nghĩ rằng điều này là có thể? – mikerobi
Jonathan là đúng: Nếu bạn muốn sử dụng điều này như là một tối ưu hóa, bạn nên để cho trình biên dịch làm công việc cho bạn, vì các trình biên dịch tốt hơn (hầu hết) con người trong việc làm những việc như vậy. Tuy nhiên, nếu bạn chỉ muốn biết nó, tôi không nghĩ rằng có một hướng dẫn ngắn làm thế nào để chuyển đổi giữa phân chia và chuyển dịch. – phimuemue