Признаюсь, у меня проблемы с пониманием библиотеки MPFR
, я пытаюсь вычислить квадрат root большого числа, но я не уверен, как определить точность переменной mpft_t root
или что лучший способ округления.
мой код выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <mpfr.h>
int main(){
mpfr_t bigNumber, bigNumber2, root2;
unsigned long int size = 1000000;
mpfr_init2(bigNumber, size);
mpfr_init2(bigNumber2, size);
mpfr_init2(root2, size);
mpfr_ui_pow_ui(bigNumber, 8, 20000, MPFR_RNDZ);
mpfr_sqrt(root2, bigNumber, MPFR_RNDA);
mpfr_pow_ui(bigNumber2, root2, 2, MPFR_RNDA);
return 0;
}
Но независимо от точности, установленной для mpz_t root
, результат часто не является удовлетворительным.
Результат mpfr_pow_ui (bigNumber2, root, 2, MPFR_RNDA)
чаще всего отличается от mpfr_t bigNumber
, и я имею в виду не плавающее значение, а целую часть.
Как узнать точность, необходимую для выполнения определенного вычисления?
Какова наилучшая форма округления для этого расчета?
Почему возникает эта неточность?