Как работает точность расчета библиотеки MPFR - PullRequest
2 голосов
/ 04 апреля 2020

Признаюсь, у меня проблемы с пониманием библиотеки 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, и я имею в виду не плавающее значение, а целую часть.

Как узнать точность, необходимую для выполнения определенного вычисления?

Какова наилучшая форма округления для этого расчета?

Почему возникает эта неточность?

...