Tôi nghi ngờ rằng bạn có thể sử dụng eval_frexp
để lấy các giá trị bạn đang tìm kiếm, mặc dù bạn vẫn sẽ phải kiểm tra xem chúng có phù hợp với loại thập phân C# hay không. Xem hướng dẫn sử dụng các yêu cầu phụ trợ Boost.Multiprecision tại đây: http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
Bạn luôn có thể thực hiện kiểm tra toán học và phạm vi dài hạn; nếu bạn không chuyển quá nhiều số, điều này có thể đủ nhanh.
Có nói tất cả những gì, bạn đều được chào đón để được nghịch ngợm và làm điều gì đó như:
#define private public
#define protected public
#include <boost/multiprecision/cpp_dec_float.hpp>
#undef private
#undef protected
Nhưng nếu nó phá vỡ trong một thông cáo trong tương lai, bạn có thể giữ cả hai miếng.
Xin chào, cảm ơn vì không có bình luận. Điều đó thực sự hữu ích.
Để làm rõ ý kiến của tôi trên:
Sử dụng eval_frexp
: sau khi nghiên cứu sâu hơn, có vẻ như rằng eval_frexp(b, cb, pi)
vẫn chỉ cung cấp lũy thừa của 2, chứ không phải quyền hạn của 10 là dường như được yêu cầu cho các loại Decimal
. Vì vậy, tôi nghi ngờ rằng bạn phải làm số học ở dạng dài nếu bạn chỉ muốn sử dụng giao diện công cộng.
Lạm dụng private
thành viên: Các tác giả và người duy trì các lớp Boost.Multiprecision đã thiết kế chúng theo các nguyên tắc nhất định; họ dường như xếp hạng việc kiểm soát tương lai là quan trọng hơn việc cung cấp quyền truy cập vào cấu trúc bên trong:
Mẫu lớp cpp_dec_float đáp ứng tất cả các yêu cầu cho loại phụ trợ. Các thành viên của nó và các chức năng không phải là thành viên được cố tình không ghi lại: đây được coi là chi tiết triển khai có thể thay đổi. (http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html)
đề nghị của tôi, được đánh dấu rõ ràng là "nghịch ngợm" và với sự cảnh báo rằng nó có khả năng sẽ phá vỡ trong một thông cáo trong tương lai, đã áp đặt những nhu cầu thiết kế của OP trước những tác giả của B.MP.
Phương pháp rất sạch sẽ nhất là đề xuất thay đổi đối với lớp cpp_dec_float
, nơi cấu trúc bên trong bị lộ ra; đưa ra một trường hợp sử dụng thuyết phục và phân tích về số lượng mã đã có hoặc không thay đổi trong lịch sử, nó thậm chí có thể được chấp nhận.
Hy vọng điều này sẽ hữu ích. Nếu độc giả vẫn có vấn đề với nó, xin vui lòng để downvote, nhưng xin vui lòng cho tôi biết phần nào làm phiền bạn vì vậy tôi có thể cố gắng để cải thiện nó.
Đó không phải là tôi , nhưng '# define'ing từ khóa là hành vi không xác định và (gần như?) không bao giờ là một giải pháp vững chắc cho các vấn đề –
Ồ, không có đối số ở đó. Tôi đã cố gắng để cụm từ trả lời ban đầu (và nhận xét của tôi snarky về downvote) để được rõ ràng rằng đây không phải là một cái gì đó là một ý tưởng tốt cho việc sử dụng sản xuất. Nếu OP thực sự cần khả năng này lâu dài, thì nếu họ không thể thuyết phục những người bảo trì B.MP, họ chỉ nên nĩa nó và hút nó vào cơ sở mã của họ - BPL cho phép điều đó. Tôi chỉ cố gắng cung cấp một giải pháp "đó là 11 giờ tối và bạn cần nó vào ngày mai". Có lẽ đó là giá trị một downvote, dunno. – AnthonyFoiani
Buồn cười giai thoại: Tôi đã cố gắng tạo "#define private public; NO REGRETS" meme trên bộ tạo meme nội bộ tại công ty hiện tại của tôi ... chỉ để được chuyển hướng đến một ví dụ * hiện có *. Vì vậy, tôi đoán tôi không phải là linh hồn duy nhất bị sa thải với ý tưởng này. :) – AnthonyFoiani