Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13

mpfr

03.05.2010, 01:02. Показов 1610. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

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

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

C
1
char *a = "55.6746635437012";
так как мне требуеться высокая точность для работы с ним, то стандартные типы данных мне не подходят. Поэтому разыскал в инете библиотеку, позволяющию работать с таким числами - MPFR.

C
1
2
3
mpfr_t b;
mpfr_init(b);
mpfr_set_str(b, a, 2, GMP_RNDN);
по идие последняя функция должна преобразовывать char * в mpfr_t. но что-то не так. что-то я не правильно понял. Кто с этим работал и знает как правильно это работает, помогите, пожалуйста, разобраться
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2010, 01:02
Ответы с готовыми решениями:

GMP, MPFR, MPIR кто знаком?
Здравствуйте уважаемые форумчане, помогите разобраться, застрял, код компилируется (VS2010), но программа вылетает, мотивируя: ...

Установка библиотек GMP и MPFR в Embarcadero RAD Studio 10.1
Здравствуйте. Собственно, вопрос - как установить библиотеки GMP и MPFR в Embarcadero, чтобы не было необходимости подключать их каждый раз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.05.2010, 05:09
C
1
mpfr_init(b);
каким образом она инициализирует локальную переменную ?
чтобы поменять переменную b таким образом, нужно чтобы это был C++ и там была передача по ссылке
должны быть где-то прототипы функций
0
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13
03.05.2010, 08:16  [ТС]
прототипы всех фунцций прописаны в:

C
1
#include <mpfr>
и если верить мануалу:

— Function: void mpfr_init (mpfr_t x)

Initialize x and set its value to NaN.
Добавлено через 21 минуту
как я понял все числа в этой библиотеке представленны в виде массивов. и добавленны спецыальные функции для работы с ними. mpfr_init, если я не ошибаюсь, это функция получающая в качастве параметра mpfr_t переменную.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.05.2010, 10:47
а, ну если массив, то может (хотя можно найти как именно он определяется, тип mpfr_t)
если там массив, тогда нужно проверить соответствие аргументов с прототипом mpfr_set_str()
0
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13
03.05.2010, 11:12  [ТС]
из мануала:

— Function: int mpfr_set_str (mpfr_t rop, const char *s, int base, mp_rnd_t rnd)

Set rop to the value of the string s in base base, rounded in the direction rnd
мне не очень понятно тут значение base
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.05.2010, 11:49
base - основание системы счисления
1
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13
03.05.2010, 14:21  [ТС]
Отлично! Спасибо огромное! Разобрался с этим!

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

Есть функция получения из 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.

The generated string is a fraction, with an implicit radix point immediately to the left of the first digit. For example, the number −3.1416 would be returned as "−31416" in the string and 1 written at expptr. If rnd is to nearest, and op is exactly in the middle of two possible outputs, the one with an even significand is chosen: that significand is considered with the exponent of op. Note that for an odd base, this may not correspond to an even last digit: for example with 2 digits in base 7, 16 and a half is rounded to 20 which is 14 in decimal, 36 and a half is rounded to 40 which is 28 in decimal, and 66 and a half is rounded to 66 which is 48 in decimal.

If n is zero, the number of digits of the significand is chosen large enough so that re-reading the printed value with the same precision, assuming both output and input use rounding to nearest, will recover the original value of op. More precisely, in most cases, the chosen precision of str is the minimal precision depending on p = PREC(op) and b only that satisfies the above property, i.e., m = 1 + ceil(p*log(2)/log(b)), with p replaced by p−1 if b is a power of 2, but in some very rare cases, it might be m+1 (the smallest case for bases up to 62 is when p equals 186564318007 for bases 7 and 49).

If str is a null pointer, space for the significand is allocated using the current allocation function, and a pointer to the string is returned. To free the returned string, you must use mpfr_free_str.

If str is not a null pointer, it should point to a block of storage large enough for the significand, i.e., at least max(n + 2, 7). The extra two bytes are for a possible minus sign, and for the terminating null character.

If the input number is an ordinary number, the exponent is written through the pointer expptr (the current minimal exponent for 0).

A pointer to the string is returned, unless there is an error, in which case a null pointer is returned.
опять же:

C
1
2
3
4
5
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);
походу я что-то не правильно подчеркул из мана, и он мне пишет ошибку сегментации. Помогите, пожалуйста, разобраться.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.05.2010, 01:45
надо попробовать более осмысленную expptr
1
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13
04.05.2010, 09:49  [ТС]
Да, ты прав, там в exppt приходит степень числа.

Спасибо, я разобрался!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru