У меня есть проблема, в которой мне нужно быть готовым исследовать больший диапазон чисел, чем может представлять длинная длинная длинная (диапазон представлен 3 ^ (n * n)).Это сообщество посоветовало мне использовать GMP для чисел с множественной точностью.Поскольку мне нужно перебирать диапазон по одному числу за раз, мне нужен способ легко увеличивать мой счетчик.
Мой импульс - использовать «mpz_add_ui (my_counter, my_counter, 1UL);», но ябеспокоюсь, что передача моего счетчика в качестве аргумента возврата и в качестве добавления может привести к искажению результата.Если функция изменяет оператор возврата во время вычисления ответа, она может изменить число таким образом, что ответ окажется неправильным.Маловероятно, что увеличение будет вызывать какие-либо проблемы, но как насчет добавления двух больших mpz_t?Или умножение, или даже возведение в степень?Документация не может ни успокоить, ни подтвердить мои опасения.Я пытался просмотреть исходный код, но сочетание макросов, редких комментариев и переходов из одного файла в другой привело меня к выводу, что я еще недостаточно хорош, чтобы следовать ему.
будьте в безопасности, я написал функцию, которая показывает формат, который, я уверен, будет работать, но я бы предпочел избежать этого, потому что я уверен, что это замедлит мою программу:
void mpz_increment(mpz_t) {
mpz_t temp;
mpz_init(temp);
mpz_add_ui(temp, a, 1UL);
mpz_set(a, temp);
mpz_clear(temp);
}
Итак, мой вопросэто.Безопасно ли передавать тип с множественной точностью в арифметическую функцию GMP как в качестве аргумента возврата, так и в качестве одного из операндов, или это приведет к искаженным результатам?