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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.85
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
#1

Возведение в степень, отрицательные числа - C++

25.07.2013, 14:13. Просмотров 4858. Ответов 52
Метки нет (Все метки)

В библиотеке <cmath> есть такая функция pow(A,B) - получаешь результат возведения A в степень B
Решил написать свой pow с положительными числами работает, а вот с отрицательными я не могу понять как правильно,
1. -2 в 2 степени, на яндексе показывает что должно быть -4, обычный калькулятор показывает -4, pow(A,B) из <cmath> показывает 4, мой pow тоже показывает 4
2. -2 в 3 степени, везде показывает -8 (в том числе и у меня)

по поводу первого варианта, так как все же правильно, -2 в 2 степени, 4 или -4?

PS, да, мне стыдно что я не помню школьную математику.. с каждым может случится..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2013, 14:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возведение в степень, отрицательные числа (C++):

Возведение числа а в степень n - C++
Возведение числа а в степень n ,задача не проста чем , 1&lt;=а&lt;=10 | 1&lt;=n&lt;=7000 Степень может быть 7000 , и тут у меня возникли трудности ,...

Возведение числа n в степень m. - C++
Написать программу - возведение числа n в m-ю степень. Входные данные поступают с клавиатуры. Результат выводится на экран.

Возведение числа в степень n-1 - C++
Есть формула {(-1)}^{n-1}*{3}^{n-1} , n увеличивается циклом на 1. Как записать числа в степень n-1 без пользов. и стандартных функций??...

Возведение числа в степень - C++
Помогите написать программу, возводящщую число M в степень N (-10&lt;M&lt;10, 0&lt;N&lt;10 - проверить выполнение данных условий)

Возведение из числа степень - C++
Прошу помочь. Вводим любое число n и надо возвести её степень. (притом, должно быть или 2 в степени x, или 3) Например: n=81 &gt;&gt; 3 в...

Возведение числа в отрицательную степень - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Rus&quot;); double a, b , pow(1),...

52
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
25.07.2013, 16:12 #16
Цитата Сообщение от castaway Посмотреть сообщение
( expo == 0. )
нельзя так даблы сравнивать.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.07.2013, 16:15 #17
Да что ты говоришь...
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
25.07.2013, 16:19 #18
Цитата Сообщение от Kukurudza Посмотреть сообщение
нельзя так даблы сравнивать.
ладно, не стоит так даблы сравнивать.
курните на досуге Цикл for проверка 0
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.07.2013, 16:23 #19
VLK, есть отличная формула, которая выводиться на соновании свойств логорифма
http://www.cyberforum.ru/cgi-bin/latex.cgi?c = {a}^{b}
http://www.cyberforum.ru/cgi-bin/latex.cgi?ln(c) = b*ln(a)
http://www.cyberforum.ru/cgi-bin/latex.cgi?c = {e}^{(ln(c))} = {e}^{(b*ln(a))}
итак нам надо найти логорифм натуральный а (используем разложение в ряд Тэйлора), а затем полученное значение умножить на b и затем, опять же используя стандартное разложение в ряд Тэйлора для экспоненты, найти http://www.cyberforum.ru/cgi-bin/latex.cgi?c =  {e}^{(b*ln(a))}

На счёт этого кода
Цитата Сообщение от VLK Посмотреть сообщение
Оцените мои программистские навыки:
long double my_pow(long double number, short int _pow)
{
long double temp = 0; // временное значение
unsigned short int counter = 1; // счетчик
temp = number;
if (_pow > 0)
{
for ( ; counter < _pow; counter++)
{ temp = temp * number; }
return temp;
}
else if (_pow < 0)
{
_pow = 0 - _pow;
for ( ; counter < _pow; counter++)
{ temp = temp * number; }
temp = 1 / temp;
return temp;
}
else if (_pow == 0)
{ return 1; }
}
или гнилой код?
- гнилой код (прошу без обид)
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.07.2013, 16:37 #20
Цитата Сообщение от Kukurudza Посмотреть сообщение
ладно, не стоит так даблы сравнивать.
курните на досуге Цикл for проверка 0
Ты плохо понимаешь о чем говоришь. Вопрос обсуждаемый в теме по ссылке никак не относится к этому сравнению.
0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
25.07.2013, 16:44  [ТС] #21
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- гнилой код (прошу без обид)
Ну какие могут быть обиды если по делу, я же не быдло что бы обижаться за дело, только тогда просьба предоставить код, который будет работать лучше моего (по всем или почти по всем параметрам), а то сказать что плохо, но не сказать как лучше, не мудрено..

Насчет формулы, зачем она мне нужна я не понимаю? не понимаю в принципе, тут у меня 2 переменных, число и степень, в итоге 30 строк кода, а в формуле куда больше, в чем смысл? может ты ошибся темой?
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.07.2013, 17:29 #22
Цитата Сообщение от VLK Посмотреть сообщение
Ну какие могут быть обиды если по делу, я же не быдло что бы обижаться за дело, только тогда просьба предоставить код, который будет работать лучше моего (по всем или почти по всем параметрам), а то сказать что плохо, но не сказать как лучше, не мудрено..
- что подразумевает да ты лучше не напишешь. Друг я напишу любой алгоритм, зачем мне что то кому то доказывать? Я привёл формулы, которые математически обоснованы и предельно корректны, это уже дело третье будешь брать их в работу или использовать алгоритм который так никогда и не возведёт дробное в дробное.
Коды разложений здесь http://www.cyberforum.ru/faq/thread4...ml#post2452211
Цитата Сообщение от VLK Посмотреть сообщение
может ты ошибся темой?
- поверь я написал как никогда по адресу.
0
Catstail
Модератор
22639 / 11008 / 1785
Регистрация: 12.02.2012
Сообщений: 18,170
25.07.2013, 17:35 #23
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
VLK, есть отличная формула, которая выводится на основании свойств логАрифма
- формула действительно хорошая. Но она не позволяет возводить в степень отрицательные числа (т.к. логарифм отрицательного числа не существует). Поэтому отрицательные числа в целую степень следует возводить умножением, а в нецелую - только в комплексной области...
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.07.2013, 17:49 #24
Цитата Сообщение от Catstail Посмотреть сообщение
- формула действительно хорошая. Но она не позволяет возводить в степень отрицательные числа (т.к. логарифм отрицательного числа не существует). Поэтому отрицательные числа в целую степень следует возводить умножением, а в нецелую - только в комплексной области...
- зачем?
Catstail, модуль комплексного числа - есть число вещественное, вот мы его и находим...
0
Миниатюры
Возведение в степень, отрицательные числа  
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.07.2013, 17:57 #25
Мне тоже интересно увидеть функцию, которая будет возводить отрицательное число в вещественную степень.
0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
25.07.2013, 18:08  [ТС] #26
-=ЮрА=-, это.. я не насмехался, и у меня не было ни какого сарказма, и я не просил что то доказывать, когда я просил написать, мне это нужно было исключительно для того, что бы сравнить с моими каракулями и сделать выводы, способствующие улучшению производительности моей программы, ну и для самосовершенствования.
Насчет формулы, я действительно не понимаю как она относится к возведению в степень (видимо из-за моей тупости).
0
Catstail
Модератор
22639 / 11008 / 1785
Регистрация: 12.02.2012
Сообщений: 18,170
25.07.2013, 18:09 #27
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- зачем?
- что "зачем"??? Модуль любого числа можно возвести в любую степень без проблем (как раз по формуле, на которую Вы ссылаетесь). А вот отрицательное число в вещественной степени будет, вообще говоря, комплексным. Формула работать будет (только вместо вещественного натурального логарифма нужно использовать его аналитическое расширение - Ln).
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.07.2013, 09:38 #28
Цитата Сообщение от Catstail Посмотреть сообщение
что "зачем"??? Модуль любого числа можно возвести в любую степень без проблем (как раз по формуле, на которую Вы ссылаетесь). А вот отрицательное число в вещественной степени будет, вообще говоря, комплексным. Формула работать будет (только вместо вещественного натурального логарифма нужно использовать его аналитическое расширение - Ln).
-
Ещё раз, не надо переводить в комплексую форму, не надо мучаться с классом комплексное число, а тем более с методом xpow. Есть одно замечательное свойство комплекса, который получается в результате, я привёл его на рисунке.

Не по теме:

(кто понимает в чём речь - то да для всех комплексов такая фаза).
Вот над доказательством я работаю. а так берём в работу да не парим мозг.


Следует заметить что тэйлор по логорифму натуральному и экспоненте реализовать в разы легче чем городить тучу кода для функции комплексного переменного. Так что вот это
Цитата Сообщение от Catstail Посмотреть сообщение
Поэтому отрицательные числа в целую степень следует возводить умножением, а в нецелую - только в комплексной области...
ни есть догма если использовать не стандартные подходы широко расписанные в учебниках.
mcd в аттаче.
0
Миниатюры
Возведение в степень, отрицательные числа  
Вложения
Тип файла: rar exp.mcd.rar (2.6 Кб, 3 просмотров)
Catstail
Модератор
22639 / 11008 / 1785
Регистрация: 12.02.2012
Сообщений: 18,170
26.07.2013, 09:43 #29
-=ЮрА=-, но отрицательное число в вещественной степени есть, вообще говоря, число комплексное? Или нет? Как его рационально вычислить - вопрос другой.
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.07.2013, 10:01 #30
Цитата Сообщение от Catstail Посмотреть сообщение
-=ЮрА=-, но отрицательное число в вещественной степени есть, вообще говоря, число комплексное? Или нет? Как его рационально вычислить - вопрос другой.
- я и не говорил что отрицательное число не даст комплекса я сказал лишь о том что достаточно найти модуль комплекса с использованием логорифма и экспонеты, а затем привести к алгебраической форме записи используя фазу http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\pi }{10}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\hat{c} = |c|*cos(\frac{\pi }{10}) + j*|c|*sin(\frac{\pi }{10})
И будет на много быстрее чем использовать функцию комплексного переменного, вот и всё. Стояла задача максимально быстрого алгоритма - ну вот он и есть максимально быстрый алгоритм.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 10:01
Привет! Вот еще темы с ответами:

Возведение числа в целую степень - C++
Задачка из методички моего вуза. Даны действительные числа a1,…,a10. Вычислить a1+(a2)^2+…+(a10)^2, используя подпрограмму возведения числа...

Возведение числа в степень через for - C++
Нужна программа для возведения числа в степень через for

Рекурсивное возведение в степень числа - C++
Рекурсивная функция,которая принимает 2 параметра:первый-число,второй-степень в которую нужно возвести число.Всё просто.Но до моей тупой...

Возведение в степень вводимого числа - C++
int _tmain() {float t, A; cin&gt;&gt;t&gt;&gt;A; float b=t+A; float a=pow(b,1.0/3.0); cout&lt;&lt;a; getch (); return 0; } Пытаюсь...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
26.07.2013, 10:01
Ответ Создать тему
Опции темы

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