Форум: "Потрепаться";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизАлгоритм возведения числа в произвольную степень Найти похожие ветки
← →
ArtemESC © (2005-10-07 19:54) [0]Мне нужна общая схема этого алгоритма...
{Вроде бы есть какой то метод разложения в ряды?}
← →
Eraser © (2005-10-07 20:01) [1]
> ArtemESC © (07.10.05 19:54)c := exp(b*ln(a));
,
Power из Math.pas
← →
vrem (2005-10-07 20:07) [2]два ряда изучить - вычисления экспоненты и натурального логарифма,
применить [1]
← →
ArtemESC © (2005-10-07 20:09) [3]>>Eraser
Спасибо, но ты меня не понял.
Мне нужен общий алгоритм вычисления...
А не Delphi - йская реализация.
← →
Eraser © (2005-10-07 20:14) [4]
> ArtemESC © (07.10.05 20:09) [3]
Всмысле алоритм вычисления логарифма?
Тогда смотри справочник по математики, где описаны числиные методы.
← →
Lamer@fools.ua © (2005-10-07 21:13) [5]>>ArtemESC © (07.10.05 20:09) [3]
[1] - это и есть общий алгоритм вычисления.
← →
default © (2005-10-07 21:19) [6]Lamer@fools.ua © (07.10.05 21:13) [5]
тогда скажите чему равно Ln(0), например, раз про общность заикнулись
← →
Lamer@fools.ua © (2005-10-07 21:22) [7]>>default © (07.10.05 21:19) [6]
Бесконечность.
← →
begin...end © (2005-10-07 21:24) [8]> Lamer@fools.ua © (07.10.05 21:22) [7]
Э-э-э... Т.е. число e в степени "бесконечность" равно нулю?
:о)
← →
Lamer@fools.ua © (2005-10-07 21:24) [9]Обманул. Минус бесконечность, конечно.
← →
default © (2005-10-07 21:25) [10]Lamer@fools.ua © (07.10.05 21:22) [7]
бесконечность понятие теоретическое, хотя, в процессоре и существует понятие inf, но там условность
а Ln(-5)?
← →
Lamer@fools.ua © (2005-10-07 21:26) [11]>>begin...end © (07.10.05 21:24) [8]
Ну вот. Поймали на горячем. Сразу говорю: стыдно.
← →
Lamer@fools.ua © (2005-10-07 21:27) [12]>>default © (07.10.05 21:25) [10]
Могу ошибаться, но, наверное, уже что-то комплексное будет. Либо вообще не будет.
← →
default © (2005-10-07 21:28) [13]Lamer@fools.ua © (07.10.05 21:26) [11]
не сказали же что +бесконечность:)
← →
default © (2005-10-07 21:29) [14]вообщем, Power из Math не при всех входных данных корректен
в местном факе вроде даже есть его доделка
← →
default © (2005-10-07 21:35) [15]"function Power(const Base, Exponent: Extended): Extended;
begin
if Exponent = 0.0 then
Result := 1.0 { n**0 = 1 }
else if (Base = 0.0) and (Exponent > 0.0) then
Result := 0.0 { 0**n = 0, n > 0 }
else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
Result := IntPower(Base, Integer(Trunc(Exponent)))
else
Result := Exp(Exponent * Ln(Base))
end"
к примеру, на Power(-2, 3.5) будет ошибка
← →
Lamer@fools.ua © (2005-10-07 22:10) [16]>>default © (07.10.05 21:35) [15]
>к примеру, на Power(-2, 3.5) будет ошибка
Было бы странно, если бы её не было, учитывая то, что функция работает c действительными аргументами и возвращает действительное число.
← →
default © (2005-10-07 22:16) [17]Lamer@fools.ua © (07.10.05 22:10) [16]
да, верно, но это не снимает ошибки борландовой ф-ции ибо Power(-8, 1/3) должно давать -2, но Power это не понимает
← →
Lamer@fools.ua © (2005-10-07 23:25) [18]>>default © (07.10.05 22:16) [17]
Тогда функцию нужно объявлять по-другому. Число 1/3 не получится записать конечной двоичной дробью.
← →
default © (2005-10-07 23:28) [19]Lamer@fools.ua © (07.10.05 23:25) [18]
есть доделка Power, объявление менять не требуется
← →
palva © (2005-10-07 23:36) [20]А какое число эта доделка возвращает при следующем обращении?
Power(-1, 1/2)
Тут два варианта i и -i. Но функция должна возвращать Extended.
← →
default © (2005-10-07 23:39) [21]palva © (07.10.05 23:36) [20]
"функция работает c действительными аргументами и возвращает действительное число."
на комплексные числа Power не притендует
всего лишь нужно учесть ситуацию вроде Power(-8, 1/3)=-2
← →
Lamer@fools.ua © (2005-10-07 23:47) [22]>>default © (07.10.05 23:28) [19]
Я рад. Это секретная разработка ФСБ? :o)
← →
palva © (2005-10-07 23:50) [23]Одно из значений Power(-8, 1/3) очень близко к действительному числу -2. Я не написал, что точно равно, поскольку значение 1/3 передается функции в приближенном виде. Данное число -2 и берется в качестве результата, а другие два результата игнорируются. Но это в данном случае. В общем случае результат будет комплексным и, возможно, далеким от какого нибудь действительного числа. Поэтому я и спросил, что будет возвращено, если написать Power(-1, 1/2)
← →
default © (2005-10-08 00:01) [24]Lamer@fools.ua © (07.10.05 23:47) [22]
да нет почему
если брать степени X=1/N(и отрицательные базисы), где N - натуральное
то нужно убедиться в нечётности N, например, через
if Odd(Trunc(1/X))
и потом результатом взять -Exp(Exponent * Ln(Abs(Base)))
← →
Lamer@fools.ua © (2005-10-08 02:21) [25]>>default © (08.10.05 00:01) [24]
А погрешность?
Если (-8)^0.333(3) = -2, то (-8)^0.33333333333334, например, чёрт его знает, чему там равняется.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c