Модернизация существующего кода с помощью библиотеки C ++ произвольной точности с плавающей запятой, есть ли шанс на успех? - PullRequest
0 голосов
/ 19 мая 2011

Допустим, у меня есть фрагмент кода, подобный этому:

typedef double My_fp_t;

My_fp_t my_fun( My_fp_t input )
{
// some fp computation, it uses operator+, operator- and so on for type My_fp_t
}

My_fp_t input = 0.;
My_fp_t output = my_fun( input );

Возможно ли дооснастить мой существующий код библиотекой C ++ произвольной точности с плавающей запятой?

Я хотел бы просто добавить #include <cpp_arbitrary_precision_fp>, изменить мой typedef double My_fp_t; на typedef arbitrary_double_t My_fp_t; и позволить перегрузке оператора C ++ выполнять свою работу ...

Моя главная проблема в том, что на самом деле мой код НЕ имеет typedef :-(, и, возможно, мой план обречен на провал.

Если предположить, что в моем коде есть typedef, с какими еще проблемами я столкнусь?

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Это может быть сложно. Я использовал шаблонный подход в моем докторском диссертационном коде, работающем с различными числовыми типами. Возможно, вы захотите взглянуть на него, чтобы увидеть проблемы, с которыми я столкнулся.

Дело в том, что с тобой все в порядке, если все, что ты делаешь со своими числами, это используй стандартные арифметические операторы. Однако, как только вы используете квадратный корень или какую-либо другую неоператорную функцию, вам нужно создать вспомогательные объекты для определения типа вашего объекта (во время компиляции, поскольку это слишком медленно, чтобы делать это во время выполнения; обратитесь за помощью к библиотеке расширенного метапрограммирования). на что), а затем вызвать правильную функцию и вернуть его как правильный тип. Это все вполне выполнимо, но, вероятно, займет больше времени, чем вы думаете, и значительно увеличит сложность вашего кода.

По своему опыту (я использовал GMP, которая должна быть самой быстрой библиотекой произвольной точности, доступной для C ++) после всех моих усилий и сложности, я обнаружил, что GMP был слишком медленным для тех вычислений, которые я делал; так что это было академически интересно, но практически бесполезно. Прежде чем начать, сделайте несколько тестов скорости, чтобы увидеть, будет ли ваша библиотека по-прежнему пригодна для использования, если вы используете арифметику произвольной точности.

1 голос
/ 19 мая 2011

Если библиотека определяет тип, который корректно перегружает используемые вами операторы, я не вижу никаких проблем ...

...