Tôi đang viết một số mã cho một hệ thống rất hạn chế trong đó toán tử mod rất chậm. Trong mã của tôi, modulo cần được sử dụng khoảng 180 lần mỗi giây và tôi nghĩ rằng việc loại bỏ nó càng nhiều càng tốt sẽ làm tăng đáng kể tốc độ mã của tôi, vì bây giờ một chu kỳ của vòng lặp chính của tôi không chạy ở 1/60 của một thứ hai như nó cần. Tôi đã tự hỏi nếu nó có thể tái thực hiện các modulo bằng cách sử dụng chỉ thay đổi chút như là có thể với phép nhân và chia. Vì vậy, đây là mã của tôi cho đến nay trong c + + (nếu tôi có thể thực hiện một modulo bằng cách sử dụng lắp ráp nó sẽ được tốt hơn). Làm thế nào tôi có thể loại bỏ các modulo mà không cần sử dụng phân chia hoặc phép nhân?thực hiện lại modulo bằng cách sử dụng các thay đổi bit?
while(input > 0)
{
out = (out << 3) + (out << 1);
out += input % 10;
input = (input >> 8) + (input >> 1);
}
EDIT: Trên thực tế tôi nhận ra rằng tôi cần phải làm điều đó cách hơn 180 lần mỗi giây. Việc xem như giá trị của đầu vào có thể là một số rất lớn lên đến 40 chữ số.
180 lần/giây ... trên phần cứng nào? Đó là không có gì trên một bộ xử lý không được nhúng hiện đại. – Mysticial
Trên bộ xử lý 16 bit. Tôi biết nó không có gì, nhưng có rất nhiều mã khác cần phải hoàn thành trong 1/60 giây và modulo cần phải xảy ra ba lần cho mỗi chu kỳ của vòng lặp chính. Tôi muốn ép ra càng nhiều tốc độ càng tốt. – PgrAm
Mô đun có đáp ứng bất kỳ loại tài sản nào không? Bạn có sử dụng cùng một mô đun nhiều lần không. Nếu không phải là trường hợp, tôi nghi ngờ bạn có thể làm bất kỳ tốt hơn so với hướng dẫn phân chia phần cứng. – Mysticial