Я подозреваю, что вы, вероятно, можете использовать eval_frexp
для получения значений, которые вы ищете, хотя вам все равно придется проверять, соответствуют ли они десятичному типу C#. См. руководство по требованиям к серверной части 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