Thông thường, bignums được thực hiện bằng cách sử dụng nhiều từ, nhưng tôi muốn chọn kích thước từ càng nhiều càng tốt. Điều này là khó khăn hơn nó có vẻ - std::uint64_t
có sẵn trong nhiều trình biên dịch 32-bit, nhưng std::uint32_t
có lẽ sẽ là một lựa chọn tốt hơn trên một máy 32-bit. Vì vậy, sự cám dỗ sau đó sẽ sử dụng std :: size_t, nhưng không đảm bảo cho một kiến trúc nhất định rằng std::size_t
là loại hiệu quả nhất cho số học, ví dụ: the new x32 Linux ABIstd::size_t
sẽ là 32 bit nhưng std::uint64_t
vẫn sẽ là lựa chọn tốt nhất.Xác định kích thước từ hiệu quả nhất để triển khai bignums trong C++ 11?
C++ 11 có các loại kích thước khác nhau được xác định nhanh, ít nhất, nhưng không cung cấp bất kỳ cách nào để truy vấn hiệu suất tương đối của chúng. Tôi nhận ra có thể không có câu trả lời di động tốt nhất, dự đoán tốt nhất của tôi bây giờ là để mặc định để std::size_t
và phát hiện kiến trúc đặc biệt tại thời gian cấu hình. Nhưng có lẽ có một cách tốt hơn?
Vâng, tôi nghĩ uint_fast32_t hoặc uint_fast64_t có thể là giải pháp tốt nhất. Nó sẽ ít nhất đảm bảo tốc độ và ít nhất 32/64 bit cho các kiểu dữ liệu của bạn. Đó có lẽ là ý nghĩa của chúng. – Morwenn
"* C++ 11 yêu cầu rằng std :: uint64_t tồn tại ví dụ *" Không, nó không. Nó là tùy chọn. Ngoài ra: "* nhưng std :: uint32_t có lẽ sẽ là lựa chọn tốt hơn trên máy 64 bit *" Tôi giả sử bạn có nghĩa là "** máy 32 bit **" –
@NicolBolas: Rất tiếc, bạn đã chính xác cả hai số. –