Обработка выражений в GMP - PullRequest
2 голосов
/ 06 октября 2009

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

1) сначала сделайте mpt_mul (z, z, z) в квадрат z

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

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

4) определить переменную mpz_t, которая называется "one", со значением 1.

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

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

Ответы [ 2 ]

3 голосов
/ 06 октября 2009

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

mpz_class z;
1 + 8 * z**2

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

2 голосов
/ 08 октября 2009

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

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

...