Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2014, 03:12   #1
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию Возвести отрицательное число в дробную степень

Доброе время суток!
Появилась неожиданная проблема с возведением в степень. А точнее надо возвести отрицательное число в дробную степень.
x,y:Extended
Первое на что попробовал Exp(x*Ln(-y)) естественно с минусом в логарифме проблема
Затем подключил Maht и попробовал Power(-y,x); проблема с минусом ушла но как только x становится дробным опять ошибка invalid floating point operation
Вовкин вне форума Ответить с цитированием
Старый 26.11.2014, 04:08   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Проблема здесь не в 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.
type_Oleg вне форума Ответить с цитированием
Старый 26.11.2014, 09:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

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

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

т.е. 2^3/4 это formula1.jpg

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

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

но сути это не меняет. Дробная степень - это корень.
А чётный корень из отрицательных чисел без комплексных чисел не извлекается.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.11.2014, 10:29   #4
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию

Приблизительно понял надо копать. да не написал сразу основание у меня тоже дробное.но на сколько я понимаю это мало что меняет.
Просто эту проблему наверняка уже кто то решил не хотелось бы заново изобретать велосипед.
Вовкин вне форума Ответить с цитированием
Старый 26.11.2014, 11:35   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

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

Просто скажите, если вашей программе нужно извлечь (для примера)
корень квадратный из числа -4 (минус четыре), какой ответ должна выдать программа?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.11.2014, 12:09   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

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

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

Последний раз редактировалось Аватар; 26.11.2014 в 12:31.
Аватар вне форума Ответить с цитированием
Старый 26.11.2014, 14:06   #7
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
угу. математики много чего решили.
Математики конечно на решали на 100 лет вперед программистов. Но однако калькулятор на планшете при введении -0,3^0,5 выдает решение -0,5477226
Вовкин вне форума Ответить с цитированием
Старый 26.11.2014, 14:16   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык у калькулятора небось несварение
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.11.2014, 14:25   #9
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 979
По умолчанию

так наверное это просто поддельный калькулятор, что бы не парится с корнями они решили вычислять обычный корень по модулю и помножить на единицу со знаком числа, хотя может там буковка какая есть типа "i" которая в математике означает некое абстрактное число равное корню из -1.
а вообще городят степени на дельфи через логарифмы (ln, log). главное формулу правильно подобрать.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 26.11.2014, 15:06   #10
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
а вообще городят степени на дельфи через логарифмы (ln, log). главное формулу правильно подобрать.
в том и дело что в данном случаи подобрать не получается
Вовкин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как возвести число в степень 2^3 yura_zb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 19.10.2012 08:49
возвести число x в степень y Imbire Паскаль, Turbo Pascal, PascalABC.NET 6 31.10.2011 09:40
Как возвести число в степень? Wintrymoon Паскаль, Turbo Pascal, PascalABC.NET 36 09.05.2011 15:11
Отрицательное число в дробную степень n4ela Общие вопросы C/C++ 7 31.10.2010 00:02
Возвести в степень b некоторое число a Михаил70 Общие вопросы Delphi 3 09.09.2009 16:10