Форум программистов, компьютерный форум CyberForum.ru

ошибка в программе - C++

Восстановить пароль Регистрация
 
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:06     ошибка в программе #1
int alice(int n,int g,int x)
{
long int a,a1;
a1=pow(g,x);
a=a1%n;
return(a);
}

Ошибка 2 error C2668: pow: неоднозначный вызов перегруженной функции c:\users\user\documents\visual studio 2010\projects\45\45\23.cpp 37 1 45 как изменить чтобы работало?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 17:06     ошибка в программе
Посмотрите здесь:

C++ ошибка в программе
Ошибка в программе C++
C++ Ошибка в программе
C++ Ошибка в программе
Ошибка в программе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.11.2013, 17:09     ошибка в программе #2
C++
1
a1 = static_cast<long int>(pow(static_cast<double>(g), x));
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:19  [ТС]     ошибка в программе #3
у меня неправильно вычисляет помогите исправить:
using namespace std;
#include<conio.h>
#include<iostream>
#include<math.h>

int alice(int,int,int);
int bob(int,int,int);

void main()
{
long int g,x,y,a,b,k1,k2,n;

cout<<"\n\t Enter value of n & g";
cin>>n>>g;

cout<<"\n\t Enter value of x & y";
cin>>x>>y;

a=alice(n,g,x);
cout<<"\n\t alice end value:"<<a;

b=bob(n,g,y);
cout<<"\n\t bob end value:"<<b;

k1=alice(n,b,x);
cout<<"\n\t valueof k1 :"<<k1;

k2=alice(n,a,y);
cout<<"\n\t valueof k2 :"<<k2;

getch();
}

int alice(int n,int g,int x)
{
long int a,a1;
a1 = static_cast<long int>(pow(static_cast<double>(g), x));
a=a1%n;
return(a);
}

int bob(int n,int g,int y)
{
long int b,b1,k2,t2;
b1 = static_cast<long int>(pow(static_cast<double>(g), y));
b=b1%n;
return(b);
}

Добавлено через 4 минуты
нужно чтобы при введении 97 и 5,а х и у: 36 58,ответ должен быть 75 у обоих
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.11.2013, 17:28     ошибка в программе #4
Цитата Сообщение от Жасулан Посмотреть сообщение
нужно чтобы при введении 97 и 5,а х и у: 36 58,ответ должен быть 75 у обоих
Видимо проиходит переполнение int, попробуй использовать более "емкий" тип вместо int, либо число с плавающей точкой (правда тут уже возможны погрешности, зато приведения в pow будут не нужны).
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:31  [ТС]     ошибка в программе #5
дело в том что n и g это простое и взаимно простое число, это реализация диффи хелмана. а какой тип можноиспользовать?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.11.2013, 17:48     ошибка в программе #6
Жасулан, проблема в том, что в С++ у встоенных целочисленных типов есть ограничения по диапозону, они не безразмерные, и выход за пределы диапозона никак не контролируется - ваши числа могут просто "не влезть"; самые "длинные" из целочисленных - unsigned long int (либо unsigned long long int, если есть), можете это попробовать. Либо long double - самый точный из встоенных с плавающей точкой - но там могут быть значительные погрешности за счёт особенностей представления. "Длинных" целочисленных типов из коробки в С++ нет - для этого обычно используют сторонние библиотеки.

Добавлено через 3 минуты
и да, само использование pow может привести к погрешностям, т.к. она использует числа с плавающей точкой.
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:54  [ТС]     ошибка в программе #7
gray_fox, если хотите я вам отправлю алгоритм диффи и вам будет поняней о чем идет речь

Добавлено через 3 минуты
gray_fox, на этой книге на 483 странице посмотрите пожалуйста http://padabum.com/d.php?id=45432
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.11.2013, 17:54     ошибка в программе #8
Жасулан, не надо, я знаю, что такое протокол Диффи-Хеллмана) я говорил о том, что у вас наверняка переполнение, и какие с этим могут быть проблемы, вот и всё.
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 18:02  [ТС]     ошибка в программе #9
gray_fox, значит мне только нужно изменить инт на unsigned long int,а программа в целом правильна?

Добавлено через 6 минут
дело в том что тут не целые числа а простые
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.11.2013, 18:06     ошибка в программе #10
Жасулан, ну секретный ключ считаете правильно (только вот функции alice и bob у вас тоже самое делают). unsigned long int - ну попробуйте на этих числах, только на других (более больших) числах всё равно в итоге будет переполнение - здесь всё зависит от того, какими числами оперируете; если будет достаточно unsigned long int - используйте его. Конкретный диапозон зависит от реализации - я не могу так сказать, подойдёт, или нет.
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 18:29  [ТС]     ошибка в программе #11
спасибо, а вообше как программировать такую арифметику: y=a(в степени n)modq

Добавлено через 2 минуты
спасибо большое! можно еще вопрос: как можно написать на программном языке такую арифметику: y=a(в степени n)mod q

Добавлено через 17 минут
gray_fox, спасибо большое! можно еще вопрос: как можно написать на программном языке такую арифметику: y=a(в степени n)mod q
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.11.2013, 18:51     ошибка в программе #12
Жасулан, эмм... у вас так всё и написано по сути...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 18:56     ошибка в программе
Еще ссылки по теме:

C++ Ошибка в программе
C++ Ошибка в программе
C++ Ошибка в программе

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

Или воспользуйтесь поиском по форуму:
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 18:56  [ТС]     ошибка в программе #13
gray_fox, я хотел бы чтобы она первоначально работала именно с маленкики простыми числами но она неправильно вычисляет
Yandex
Объявления
24.11.2013, 18:56     ошибка в программе
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru