2009-10-06 4 views
2

Недавно я познакомился с библиотекой GMP для высокоточной арифметики. Это кажется достаточно простым, но в моей первой программе я сталкиваюсь с практическими проблемами. Как оценивать выражения. Например, если у меня есть «1 + 8 * z^2», а z - переменная mpz_t «большого целого», как я могу ее быстро оценить? (У меня есть большие выражения в программе, которую я пишу.) В настоящее время я выполняю каждую отдельную операцию вручную и сохраняю результаты во временных переменных, например, для выражения «1 + 8 * z^2»:Обработка выражений в GMP

1) сначала сделать mpt_mul (г, г, г) в квадрат Z

2), а затем определить переменную mpz_t под названием "восемь" со значением 8.

3) умножить результат от одного шага к этому 8 и хранить в переменной temp.

4) определяют переменную mpz_t под названием «один» со значением 1.

5) добавить это к результату в шаге 3, чтобы найти окончательный ответ.

Это то, что я должен делать? Или есть лучший способ? Это действительно помогло бы, если бы было руководство пользователя для GMP, чтобы люди начали работу, но есть только справочное руководство.

ответ

3

GMP поставляется с C++ class interface, который обеспечивает более простой способ выражения арифметических выражений. Этот интерфейс использует C++ оператор перегружать, чтобы позволить вам написать:

mpz_class z; 
1 + 8 * z**2 

Это, конечно, при условии, что вы используете C++. Если вы используете только C, вам может потребоваться использовать интерфейс C для GMP, который не обеспечивает перегрузку оператора.

+0

Да. Я использую чистый C. –

+0

В этом случае вы применяете правильный подход. Возможно, вы захотите рассмотреть возможность перехода на C++, если вы собираетесь много чего делать. –

2

Оказывается, что в поддиректории «expr» имеется неподдерживаемый парсер выражений, распространенный с GMP. Он не является частью GMP и может быть изменен, но он обсуждается в файле README в этом каталоге. Не гарантированно выполнить расчет самым быстрым способом, поэтому покупатель остерегается.

Таким образом, пользователь должен вручную оценить все выражения при использовании GMP, если они не захотят использовать эту библиотеку или сделать свой собственный парсер выражений.

Смежные вопросы