LINUX.ORG.RU

mpfr


0

0

Всем доброго времени суток!

Парюсь тут над одной програмкой. Не буду вдаваться в подробности.

у меня есть массив символов:

char *a = «55.6746635437012»;

так как мне требуеться высокая точность для работы с ним, то стандартные типы данных мне не подходят. Поэтому разыскал в инете библиотеку, позволяющию работать с таким числами - MPFR.

mpfr_t b;

mpfr_init(b);

mpfr_set_str(b, a, 2, GMP_RNDN);

по идие последняя функция должна преобразовывать char * в mpfr_t. но что-то не так. что-то я не правильно понял. Кто с этим работал и знает как правильно это работает, помогите, пожалуйста, разобраться

mpfr_t b;

mpfr_init(b);

mpfr_set_str(b, a, 2, GMP_RNDN);

Не работал в GMP но что-то здесь однозначно не так. Где вы что-то в b присваиваете? mpfr_* не указатель ли на mpfr_t принимает?

theos ★★★
()
Ответ на: комментарий от theos

Из мануала:

The floating-point functions expect arguments of type mpfr_t.

— Function: void mpfr_init (mpfr_t x)

Initialize x and set its value to NaN.

Nikolayi4
() автор топика

mpfr_set_str (mpfr_t rop, const char *s, int base, mp_rnd_t rnd)
для char *a = «55.6746635437012» наверное ж base == 10, а не 2

rudnykiv
()
Ответ на: комментарий от ftor

Отлично! Спасиоб всем огромное! Честь вам и хвала! :)

У меня еще один вопросик остался

Есть функция получения из mpfr_t чаровского массива

— Function: char * mpfr_get_str (char *str, mp_exp_t *expptr, int b, size_t n, mpfr_t op, mp_rnd_t rnd)

Convert op to a string of digits in base b, with rounding in the direction rnd, where n is either zero (see below) or the number of significant digits; in the latter case, n must be greater or equal to 2. The base may vary from 2 to 36.

опять же:

mpfr_t a;

char *s = mpfr_get_str (0, 0, 10, 0, a, GMP_RNDN);

//либо mpfr_get_str (s, 0, 10, 0, a, GMP_RNDN);

походу я что-то не правильно подчеркул из мана, и он мне пишет ошибку сегментации. Помогите, пожалуйста, разобраться.

Nikolayi4
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.