Почему отрицательное число нельзя возвести в дробную степень
Перейти к содержимому

Почему отрицательное число нельзя возвести в дробную степень

  • автор:

Почему отрицательное число нельзя возвести в дробную степень

Доброе время суток!
Появилась неожиданная проблема с возведением в степень. А точнее надо возвести отрицательное число в дробную степень.
x,y:Extended
Первое на что попробовал Exp(x*Ln(-y)) естественно с минусом в логарифме проблема
Затем подключил Maht и попробовал Power(-y,x); проблема с минусом ушла но как только x становится дробным опять ошибка invalid floating point operation

Регистрация: 02.03.2008
Сообщений: 2,537

Проблема здесь не в Delphi, а в сути. То есть в самой математике.
Чему равно например (-1)^(1.5) ?
Ответ: i мнимая единица.
А мнимых чисел среди имеющихся типов в Pascal нет.

PS А чему равно (-1)^(0.25) ? Корень из мнимой единицы.
А чему равно (-1)^(1/7) ? Так сразу и не сообразишь..
Вообщем, надо изучать комплексные числа, всякие формулы Эйлера, Муавра. И создавать что-то вроде

type tComplex=record Re,Im:Real; end;

Может быть в AlgLib что-нибудь есть.

PPS Кстати, нашел универсальный калькулятор
Например, посчитал (-1)^(1/7), оказалось равно 0.901+i0.4339

Последний раз редактировалось type_Oleg; 26.11.2014 в 04:59 .
Регистрация: 09.01.2008
Сообщений: 26,238

type_Oleg, по сути абсолютно верно,

небольшая поправка если степень дробная, то число возводится в степень, равную числителю и извлекается корень степени, равный знаменателю.

(-1) в степени 0.25 это formula2.jpg

добавлю, что отрицательная степень означает, что нужно единицу разделить на число в данной степени, но уже без знака минус:
т.е.
2 в степени -3/5 = formula3.jpg

но сути это не меняет. Дробная степень — это корень.
А чётный корень из отрицательных чисел без комплексных чисел не извлекается.

Serge_Bliznykov
Посмотреть профиль
Найти ещё сообщения от Serge_Bliznykov

Пользователь
Регистрация: 26.11.2014
Сообщений: 15

Приблизительно понял надо копать. да не написал сразу основание у меня тоже дробное.но на сколько я понимаю это мало что меняет.
Просто эту проблему наверняка уже кто то решил не хотелось бы заново изобретать велосипед.

Регистрация: 09.01.2008
Сообщений: 26,238

Просто эту проблему наверняка уже кто то решил не хотелось бы заново изобретать велосипед.

угу. математики много чего решили.

Просто скажите, если вашей программе нужно извлечь (для примера)
корень квадратный из числа -4 (минус четыре), какой ответ должна выдать программа?

Serge_Bliznykov
Посмотреть профиль
Найти ещё сообщения от Serge_Bliznykov

Регистрация: 17.11.2010
Сообщений: 19,042

А если у отрицательного основания еще и степень не рациональная, например корень из двух или пи, то совсем хорошо. По хорошему, если бы возникла необходимость средствами делфи такие вычисления делать, то использовал бы разложение в степенной ряд. Собственно и стандартные функции используют такое разложение, но вот беда — не для комплексных чисел

PS заглянул в юнит VarCmplx, там уже реализованы такие операции, например VarComplexPower

Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.11.2014 в 12:31 .

Парадокс с возведением в степень

Author24 — интернет-сервис помощи студентам

Здравствуйте, уважаемые математики!
Во многих школьных учебниках рациональная степень определяется только для неотрицательных чисел. Например, число 8 можно возвести в степень с показателем 1/3 (что равноценно действию кубического корня с ответом 2), но число (-8) в степень с показателем 1/3 возводить нельзя. В хороших учебниках (например, учебник АЛГЕБРА 9 класс Макарычев, Миндюк, Нешков) можно прочитать и обоснование этого ограничения: поскольку 1/3 = 2/6, то должно выполняться равенство (-8)^1/3 = (-8)^2/6. Однако слева ответом должно быть число -2, тогда как справа — число 2! Чтобы избежать такой неувязки, в определение степени с дробным показателем и вводится ограничение: основание степени должно быть неотрицательным числом.
А теперь мой вопрос. По той же причине, мы не можем непротиворечиво возводить отрицательные числа даже в целую степень, например, в 1-ю или 3-ю! Например, (-2)^1 = -2, но 1 = 2/2, поэтому должно выполняться равенство (-2)^1 = (-2)^2/2. На самом деле справа ответом должно быть число +2 (корень квадратный из -2 в квадрате). Значит, по тем же соображениям, что и для дробных степеней, мы должны запретить возводить отрицательные числа и в целые степени (по крайней мере нечётные), что явно обсурд! Получается странная ситуация с возведением отрицательных чисел в любую степень, не только дробную. Как же все это урегулировать?

94731 / 64177 / 26122

[C++] Возведение с дробную степень.

Столкнулся с необходимостью возвести отрицательное число в дробную степень.
Например -2^2.3
pow( -2, 2.3 ) выдает non
Emacs’oвский калькулятор тоже не может посчитать
А вот kcalc посчитал
Как обходить такие ситуации?

n4ela ★
28.02.10 14:09:49 MSK

брать по модулю. не знаю, как в kcalc, а в математике, например, не определены дробные степени отрицательного числа

rumata_0
( 28.02.10 14:16:06 MSK )
Ответ на: комментарий от rumata_0 28.02.10 14:16:06 MSK

Ну если степень рациональная, то какие проблемы? Представить в виде неправильной дроби и готово

Gorthauer ★★★★★
( 28.02.10 14:24:31 MSK )
Ответ на: комментарий от rumata_0 28.02.10 14:16:06 MSK

Брать по модулю была первая моя идея.
Но я буду получать положительный ответ, потом конечно можно приписать минус, но как то не очень красиво
В kcalc я получаю отрицательный результат например -2^2.3 = -4.92457765338
Не знаю как там это реализована, но думаю если полезу в исходники убью много времени прежде чем пойму как это сделано.
Вобще задача не моя(подруга дала дохрена формул со словами «вот так это все считается» и сама свалила), по этому не знаю как должна себя вести программа. Может при отрицательных числах вобще не должны считаться.

Почему нельзя возвести отрицательное число в вещественную степень?

Потому что корень для отрицательных чисел извлекается только для непарных степеней. А 0.1 — это 1/10, то-есть корень десятой степени. Имеется ввиду, что нет такого вещественного числа, которое в 10 степени дало бы -120.

Отслеживать
ответ дан 27 авг 2012 в 11:14
Valeriy Karchov Valeriy Karchov
726 4 4 серебряных знака 9 9 бронзовых знаков

а как получить в коде для -120^0.1 = -1.6 Просто Microsoft Mathematics решила это как-то и выдала мне именно -1.6.

27 авг 2012 в 11:23
а там точно -120^0.1 = -1.6, а не -(120^0.1) = -1.6?
27 авг 2012 в 11:26
27 авг 2012 в 11:35
Не могу пройти по ссылке, «403 Forbidden»
27 авг 2012 в 11:40

Да, видишь, оно восприняло -120^0.1 как -(120^0.1). Если хочешь, чтобы твоя программа также посчитала, то поменяй Math.Pow(-120, 0.1) на -Math.Pow(120, 0.1).

27 авг 2012 в 11:53

Потому что надо было учить математику в школе.

Возведение отрицательного числа в нецелую степень в общем случае имеет результатом комплексное число, то есть число с мнимой частью.

i=sqrt(-1); //определение мнимого числа 

Надо использовать спец. библиотеку с поддержкой комплексной математики, например

Отслеживать
ответ дан 27 авг 2012 в 11:56
81.3k 7 7 золотых знаков 73 73 серебряных знака 153 153 бронзовых знака

  • c#
  • .net
  • математика
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.3.1.5619

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *