Форум программистов, компьютерный форум, киберфорум
Наши страницы
Boost C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
ronaldo
92 / 46 / 63
Регистрация: 16.06.2014
Сообщений: 378
1

Функция powm1() не работает

11.04.2015, 08:01. Просмотров 913. Ответов 7
Метки нет (Все метки)

Доброго времени суток.
Объясните, почему не работает программа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/math/special_functions/powm1.hpp>
using namespace boost::multiprecision;
using namespace boost::math;
using namespace std;
int main()
{
    uint1024_t res;
    int i,j;
    cin>>i;
    cin>>j;
    res=powm1(i,j)+1;
    cout<<res<<endl;
    return 0;
}
Скрин ошибок:
Функция powm1() не работает

P.S. Я рассчитывал получить степень числа ij.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2015, 08:01
Ответы с готовыми решениями:

Функция корректно работает в Delphi 7 и не неверно работает в RAD Studio 10
Переписываю свою программу с Delphi 7 под RAD Studio 10. Столкнулся с проблемой - функция в...

Функция cin.get(array, 80) работает в одной программе, но не работает в другой
Добрый день. Я что то совсем запутался, одна и та же функция в одной программе работает, а в...

Стандартная функция delete в Eclipse работает а в AndroidStudio не работает
case R.id.btnDelete: {//Кнопка удаление последнего символа ...

В VS 2015 не работает рекурсивная функция, которая работает в C++Builder
Добрый день! Перенес блок кода из старого учебного проекта под C++Builder, который там всегда...

Как функция работает,в обработчике не работает
В таком виде все прекрасно работает (function ($) { $.fn.percent = function...

7
Nick Alte
Эксперт С++
1652 / 1024 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
11.04.2015, 09:31 2
powm1 выдаёт результат типа double, а 1024-битное целое предпочитает в качестве исходных данных нечто более удобоваримое (целочисленный тип или строку с записью числа например тащемта).
1
ronaldo
92 / 46 / 63
Регистрация: 16.06.2014
Сообщений: 378
11.04.2015, 10:31  [ТС] 3
Nick Alte, так верно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/math/special_functions/powm1.hpp>
using namespace boost::multiprecision;
using namespace boost::math;
using namespace std;
int main()
{
    uint1024_t res;
    int i,j;
    cin>>i;
    cin>>j;
    res=(uint1024_t)powm1(i,j)+1;
    cout<<res<<endl;
    return 0;
}
0
Nick Alte
Эксперт С++
1652 / 1024 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
11.04.2015, 10:38 4
Нет, здесь то же самое происходит: вычисляется double и происходит попытка перегнать в целое. Надо сразу оперировать только типом uint1024_t и пользоваться функцией pow из состава multiprecision.
1
ronaldo
92 / 46 / 63
Регистрация: 16.06.2014
Сообщений: 378
11.04.2015, 10:49  [ТС] 5
Цитата Сообщение от Nick Alte Посмотреть сообщение
функцией pow из состава multiprecision
Я понял, что написать следует так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/math/special_functions/powm1.hpp>
using namespace boost::multiprecision;
using namespace boost::math;
using namespace std;
int main()
{
    uint1024_t res;
    int i,j;
    cin>>i;
    cin>>j;
    res=pow(i,j);
    cout<<res<<endl;
    return 0;
}
На скрине смотри, что вышло из этой попытки.
0
Миниатюры
Функция powm1() не работает  
Nick Alte
Эксперт С++
1652 / 1024 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
11.04.2015, 11:31 6
Лучший ответ Сообщение было отмечено ronaldo как решение

Решение

Неправильно понял потому что. Этот pow - он из стандартной библиотеки pow и тоже таки производит на свет double. Надо было что-то вроде
C++
1
res = pow(uint1024_t(i), j);
1
ronaldo
92 / 46 / 63
Регистрация: 16.06.2014
Сообщений: 378
11.04.2015, 12:13  [ТС] 7
Nick Alte, а почему код из поста 6 работает без #include <math.h>?
0
Nick Alte
Эксперт С++
1652 / 1024 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
11.04.2015, 13:59 8
Потому что там используется функция, работающая с типами из multiprecision. Она и сама находится в boost/multiprecision, а не в math (там - функция, работающая с обычными числами).
1
11.04.2015, 13:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2015, 13:59

Функция MapAndLoad() работает с dll-файлом, не работает с exe-файлом
Доброго времени суток. Объясните, почему программа #include &lt;windows.h&gt; #include &lt;imagehlp.h&gt;...

Не работает функция
Здравствуйте, помогите разобратся почему функция не срабатывает, в Js разбираюсь плохо, но очень...

Не работает функция
&lt;? function getTable($cols,$rows,$color) { echo &quot;&lt;table border=1...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru