Apple Falling Sidision

[Paul Curtis] tại Segger có một loạt bài đăng trên blog thú vị về việc tính toán phân chia. Đây từng là một chủ đề nóng hơn, nhưng ngày nay nhiều máy tính hoặc ngôn ngữ máy tính có hỗ trợ để nhân và phân chia tích hợp. Nhưng một số bộ xử lý thiếu các hướng dẫn và một thư viện để làm điều đó có thể ít hơn lý tưởng. Biết cách cuộn của riêng bạn có thể cho phép bạn tối ưu hóa cho tốc độ hoặc không gian. Các bao gồm trả góp hiện tại sử dụng thuật toán của Newton để phân chia.

Steve Martin đã có một chút nổi tiếng về cách trở thành triệu phú và không bao giờ nộp thuế. Anh ta bắt đầu bằng cách nói: “Đầu tiên … nhận được một triệu đô la. Sau đó, phương pháp này là một chút giống như vậy vì lần đầu tiên bạn phải biết cách nhân lên trước khi bạn có thể chia. Tiền đề cơ bản là gấp đôi: Phương thức của Newton cho phép bạn tinh chỉnh một ước tính về đối ứng bằng cách nhân liên tiếp và sau đó nhân một số một đối ứng là giống như phân chia. Nói cách khác, nếu chúng ta cần chia 34 xuống 6, bạn có thể viết lại 34/6 xuống 34 * 1/6 và câu trả lời là như nhau.

Sự xấp xỉ của Newton cho các đối ứng cho phép bạn đoán xem câu trả lời và sau đó tinh chỉnh nó thông qua một loạt các phép nhân. Mỗi phép nhân tạo ra độ chính xác tốt hơn. Bạn có thể sử dụng điều này để thực hiện một sự đánh đổi tốc độ / không gian cổ điển. Ví dụ: hãy cho rằng chúng ta muốn tìm thấy đối ứng của một byte (có lẽ là một byte điểm cố định). Một bảng tra cứu gồm 256 yếu tố sẽ cung cấp độ chính xác hoàn hảo và sẽ rất nhanh. Không còn toán học là cần thiết. Nhưng khoảng 32 bit thì sao? Bây giờ bàn là quá lớn. Nhưng bạn có thể tra cứu, nói rằng 8 bit đầu tiên của số 32 bit. Hoặc hơn. Hoặc ít hơn. phụ thuộc vào những gì quan trọng với bạn.

Vì vậy, bây giờ bạn có một ước tính kém về đối ứng của bạn. Sir Issac có thể làm cho nó tốt hơn. Đối với một số số A, bạn lấy ước tính của mình (x) và nhân chúng lại với nhau. Trừ số đó từ 2 và bạn có một yếu tố để nhân ước tính cũ của mình để có được ước tính mới. Bỏ qua phía trước, rõ ràng nếu ước tính của bạn là đúng, phép nhân sẽ cung cấp cho bạn 1 mà sẽ không thay đổi ước tính cũ. Nếu ước tính bị tắt, bạn sẽ nhận được một yếu tố tỷ lệ.

Như một công thức nó trông như thế này:

x = x * (2-A * X);
Vì vậy, nếu bạn quyết định đối ứng 22 có thể là 0,02, lần đầu tiên sẽ cung cấp cho bạn:

0,02 * (2-22 * 0,02) = .0312

0,0312 * (2-22 * .0312) = .0410

0,0410 * (2-22 * .0410) = 0,0450
Câu trả lời đúng là một dấu thập phân lặp lại 0,0454545 và nếu bạn tiếp tục, bạn sẽ đến đó.

Tất nhiên, sau đó bạn phải nhân thêm một lần nữa để làm phân chia.

Chúng tôi thích rằng bài đăng có triển khai điểm cố định và sau đó kiểm tra mã lắp ráp kết quả cho ARM, RISC-V và DSPIC30. Cũng đáng để đọc.

Chúng tôi yêu các thủ thuật toán học, chúng tôi có thể sử dụng trong ngôn ngữ lắp ráp. Nếu bạn đang làm việc trên AVR và điểm nổi, đừng bỏ lỡ phương pháp này.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post