Я подозреваю, что вы можете использовать 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)
Мое предложение, которое было четко помечается как «непослушные» и с предупреждением, что он, скорее всего, перерыв в будущих версиях было ввести потребности конструктивные О.П. впереди тех автора B.MP.
Самый чистый метод может заключаться в том, чтобы предложить изменение класса cpp_dec_float
, где показана внутренняя структура; учитывая убедительный пример использования и анализ того, насколько код исторически или исторически не изменился, его можно даже принять.
Надеюсь, это поможет. Если у читателей все еще есть проблемы с этим, пожалуйста, не стесняйтесь, но, пожалуйста, дайте мне знать, какая часть вас беспокоит, поэтому я могу попытаться ее улучшить.
Это не я , но ключевые слова '# define' являются неопределенным поведением и (почти?) никогда не являются твердым решением проблем. –
О, никаких аргументов нет. Я попытался сформулировать исходный ответ (и мой snarky комментарий о downvote), чтобы быть ясным, что это не то, что является хорошей идеей для использования в производстве. Если OP действительно нуждается в этой возможности в долгосрочной перспективе, то, если они не могут убедить сторонников B.MP, они должны просто разветвить ее и сосать ее в свою кодовую базу - это позволяет BPL. Я просто пытался предложить решение «это 11 вечера, и вам нужно это завтра». Может быть, это стоит нисходящего, не знаю. – AnthonyFoiani
Забавный анекдот: я попытался создать memo-генератор «#define private public, NO REGRETS» для внутреннего генератора meme в моей текущей компании ... только для перенаправления на * существующий * пример. Поэтому я думаю, что я не единственная сумасшедшая душа с этой идеей. :) – AnthonyFoiani