Подозирам, че вероятно можете да използвате eval_frexp
, за да получите стойностите, които търсите, въпреки че все пак ще трябва да проверите дали те се вписват в типа C# Decimal. Вижте ръководството относно изискванията за бекенда на Boost.Multiprecision тук: http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
Винаги можете просто да направите дълга математика и проверка на диапазона; ако не прехвърляте твърде много номера, това може да е достатъчно бързо.
Като каза всичко това, можете да бъдете палав и да направите нещо като:
#define private public
#define protected public
#include <boost/multiprecision/cpp_dec_float.hpp>
#undef private
#undef protected
Но ако се повреди в бъдеща версия, можете да запазите и двете части.
Хей, благодаря за отрицателния вот без коментар. Това наистина е полезно.
За да изясня коментарите си по-горе:
Използване на eval_frexp
: след допълнително проучване изглежда, че eval_frexp(b, cb, pi)
все още предлага само степени на 2, а не степени на 10, както изглежда се изисква за типа Decimal
. Така че подозирам, че трябва да направите аритметиката в дълга форма, ако искате да използвате само публичния интерфейс.
Злоупотреба с private
членове: Авторите и поддържащите класове Boost.Multiprecision са ги проектирали според определени насоки; те очевидно са класирали защитата на бъдещето като по-важна от осигуряването на достъп до вътрешната структура:
Шаблонът на класа cpp_dec_float изпълнява всички изисквания за Backend тип. Неговите членове и функции, които не са членове, умишлено не са документирани: те се считат за подробности за изпълнението, които подлежат на промяна. (http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html)
Моето предложение, което беше ясно означено като „кофти“ и с предупреждението, че вероятно ще се счупи в бъдеща версия, беше да наложа дизайнерските нужди на OP пред тези на автора на B.MP.
Най-чистият метод може да бъде да се предложи промяна в класа cpp_dec_float
, където вътрешната структура е изложена; като се има предвид завладяващ случай на употреба и анализ на това колко кодът се е променил или не се е променил в миналото, може дори да бъде приет.
Надявам се това да помогне. Ако читателите все още имат проблеми с него, моля, не се колебайте да гласувате против, но моля, уведомете ме коя част ви притеснява, за да мога да се опитам да го подобря.
person
AnthonyFoiani
schedule
12.05.2013