Как создать массив mpfr? - PullRequest
0 голосов
/ 07 мая 2020

Я искал несколько часов в inte rnet и в документации, но не увидел упоминания о создании массива / списка объектов MPFR (GMP). Я использую C, а не C ++. Пожалуйста, помогите мне, мне нужно только получить и установить значения из этого массива и в него, и, возможно, один раз "mallo c" ..

1 Ответ

1 голос
/ 07 мая 2020

В этом GNU MPFR 4.0.2 я обнаружил:

Тип данных C для таких объектов - mpfr_t, внутренне определенный как одноэлементный массив структура (так что при передаче в качестве аргумента функции фактически передается указатель), а mpfr_ptr - это тип данных C, представляющий указатель на эту структуру.

И at 5.1 функция инициализации :

Объект mpfr_t должен быть инициализирован перед сохранением в нем первого значения. Для этой цели используются функции mpfr_init и mpfr_init2.

Function: void mpfr_init2 (mpfr_t x, mpfr_prec_t prec)

Инициализировать x, установить его точность равной точно до c бит и значение NaN. (Предупреждение: вместо этого соответствующая функция MPF инициализируется нулем.)

Обычно переменная должна инициализироваться только один раз или, по крайней мере, очищаться с помощью mpfr_clear между инициализациями. Чтобы изменить точность переменной, которая уже была инициализирована, используйте mpfr_set_pre c. Точность pre c должна быть целым числом между MPFR_PREC_MIN и MPFR_PREC_MAX (в противном случае поведение не определено).

Function: void mpfr_inits2 (mpfr_prec_t prec, mpfr_t x, ...)

Инициализировать все переменные mpfr_t заданной переменной аргумент va_list, установить их точность должна быть точно до c бит, а их значение - до NaN. См. Mpfr_init2 для более подробной информации. Предполагается, что va_list состоит только из типа mpfr_t (или эквивалентно mpfr_ptr). Он начинается с x и заканчивается при обнаружении нулевого указателя (тип которого также должен быть mpfr_ptr).

Один пример:

{
  mpfr_t x, y;
  mpfr_init (x);                /* use default precision */
  mpfr_init2 (y, 256);          /* precision exactly 256 bits */
  …
  /* When the program is about to exit, do ... */
  mpfr_clear (x);
  mpfr_clear (y);
  mpfr_free_cache ();           /* free the cache for constants like pi */
}

Надеюсь, это поможет вам.

...