2010-08-12 48 views
6

Tôi đang tìm kiếm một cách nhanh chóng để thực hiện các KHỐI sau:64 bit bằng cách phân chia 32 bit

  • cổ tức là một chút nguyên ký 64.
  • Số chia là số nguyên 32 bit đã ký.
  • Hạn mức phải là số nguyên 64 bit đã ký, phần còn lại là không cần thiết.
  • Mật khẩu thấp của cổ tức bằng không.

Tôi chỉ đang sử dụng các loại dữ liệu 32 bit, vì các kiểu dữ liệu 64 bit không được trình biên dịch hỗ trợ và không có lắp ráp. Độ chính xác có thể bị tổn hại một phần vì lợi ích của tốc độ.

Bất kỳ con trỏ nào trên trang này?

+0

Nếu 32 bit thấp hơn của bạn là 0, thì bạn sẽ không còn phần còn lại. – ysap

+2

@ysap: Không đúng sự thật. Xem xét '(1L << 32)/3'. –

+0

Tôi tò mò, bạn có đang sử dụng bộ vi xử lý 32 bit, với trình biên dịch C-up-date_ hợp lý không hỗ trợ các số nguyên 64 bit không? Sự kết hợp bực bội này là gì? – mctylr

Trả lời

2

Phân chia 64/32 được hỗ trợ trực tiếp bởi i386 và có thể là các máy khác, miễn là từ cao của cổ tức nhỏ hơn số chia (tức là cổ tức nằm trong phạm vi 32x32-> 64 nhân với số chia). Nếu trình biên dịch của bạn có hỗ trợ tối thiểu cho các loại 64 bit, nó có thể nhận ra tình trạng này và tận dụng lợi thế của nó.

Giả sử bạn đã kiểm tra asm được tạo ra và thấy rằng nó không tận dụng điều này, hoặc nếu bạn biết cpu của bạn không có chỉ dẫn phân chia như vậy, thì bạn chỉ cần làm phân chia dài như bạn đã học lớp học .. ngoại trừ rằng nó là cơ sở-4294967296 thay vì cơ sở-10.

Bạn có thể thử đọc nguồn tới libgcc vì nó chứa mã cho bộ phận 64/64 cho các máy không có hỗ trợ gốc.

Chỉnh sửa: Trên thực tế, vì bạn không có hoạt động chia 64/32, bạn có thể muốn sử dụng cơ sở-65536. Điều này là do phân chia dài ngây thơ đòi hỏi phải chia số "2 chữ số" theo số "1 chữ số" ở mỗi bước. Tất nhiên, bây giờ bạn đang bị mắc kẹt khi thực hiện các bước khác ..

+1

Knuth có một cuộc thảo luận về phân chia dài và mô tả thuật toán phân chia dài. Nếu bạn đi xuống con đường nhìn vào đó, Knuth có một tối ưu hóa, nơi bạn có thể rời khỏi vòng lặp sớm. Nó rất khó để kiểm tra, nó chỉ giúp trong một số ít các trường hợp và có thể được an toàn ra ngoài. – janm

Các vấn đề liên quan