Podejrzewam, że prawdopodobnie możesz użyć wartości eval_frexp
, aby uzyskać wartości, których szukasz, chociaż nadal musisz sprawdzić, czy pasują do typu C# dziesiętnego. Zobacz instrukcję na temat wymogów zaplecza Boost.Multiprecision tutaj: http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
Zawsze można po prostu wykonaj longhand matematyczne i zakresu kontroli; jeśli nie przesyłasz zbyt wielu liczb, może to być wystarczająco szybkie.
Powiedziawszy to wszystko, zapraszamy do być niegrzeczne i zrobić coś takiego:
#define private public
#define protected public
#include <boost/multiprecision/cpp_dec_float.hpp>
#undef private
#undef protected
Ale jeśli przerwy w przyszłej wersji, pojawi się zachować zarówno kawałki.
Hej, dzięki za głosowanie bez komentarza. To naprawdę pomocne.
Aby wyjaśnić moje komentarze powyżej:
Korzystanie eval_frexp
: po dalszych badań, wydaje się, że nadal jest tylko eval_frexp(b, cb, pi)
oferujących potęgi 2, a nie 10 jak uprawnienia wydaje się być wymagane dla danego typu Decimal
. Podejrzewam więc, że musisz wykonać arytmetykę w długiej formie, jeśli chcesz używać tylko interfejsu publicznego.
Abusing private
członków: Autorzy i opiekunowie zajęć Boost.Multiprecision zaprojektowali je zgodnie z określonymi wytycznymi; najwyraźniej ocenili przyszłe zabezpieczenia jako ważniejsze niż zapewnienie dostępu do wewnętrznej struktury:
Szablon klasy cpp_dec_float spełnia wszystkie wymagania dla typu Backend. Jego członkowie i funkcje niebędące członkami są świadomie nieudokumentowane: są to dane dotyczące implementacji, które mogą ulec zmianie. (http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html)
moja propozycja, która została wyraźnie oznaczona jako „niegrzeczne”, a z ostrzeżeniem, że to może złamać w przyszłym wydaniu, było nałożyć na potrzeby projektu PO przed tymi autora B.MP.
Bardzo najczystszą metodą może być zaproponowanie zmiany w klasie cpp_dec_float
, w której ujawniona jest struktura wewnętrzna; biorąc pod uwagę nieodparty przypadek użycia i analizę tego, ile kodu historycznie się zmieniło, może nawet zostać zaakceptowana.
Mam nadzieję, że to pomoże. Jeśli czytelnicy nadal mają z tym problem, możesz go zgłosić, ale proszę dać mi znać, która część Cię niepokoi, abym mógł spróbować ją poprawić.
To nie ja , ale '# define'ing keywords jest niezdefiniowanym zachowaniem i (prawie?) nigdy nie jest solidnym rozwiązaniem problemów –
Och, nie ma tam argumentu. Próbowałem sformułować oryginalną odpowiedź (i mój złośliwy komentarz na temat stanowiska), aby było jasne, że nie jest to coś, co jest dobrym pomysłem do wykorzystania w produkcji. Jeśli OP naprawdę potrzebuje tej zdolności przez długi czas, to jeśli nie będą w stanie przekonać opiekunów B.MP, powinni po prostu ją rozwidlić i zassać do swojej bazy kodowej - pozwala na to BPL. Właśnie próbowałem zaoferować rozwiązanie "jest godzina dwudziesta trzecia i potrzebujesz go jutro". Może to zasługa, dunno. – AnthonyFoiani
Zabawna anegdota: Próbowałem stworzyć meme "#define private public; NO REGRETS" na wewnętrznym generatorze memów w mojej obecnej firmie ... aby zostać przekierowane do * istniejącego * przykładu. Sądzę więc, że nie jestem jedyną duszą z demencją z tym pomysłem. :) – AnthonyFoiani