Сейчас на форуме: yashechka (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Извлечение корня n-oй степени
Посл.ответ Сообщение


Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 01 апреля 2005 16:39
· Личное сообщение · #1

Вычисляю на Дельфях так по старинке считаю, но такая вот зрень когда число X отрицательно, то логарифм не считается. А мне нужно, чтобы считал выражение при например -3.

у:=2*exp((1/(-x))*ln(x+exp((1/4)*ln(abs(x)))))



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 01 апреля 2005 18:20
· Личное сообщение · #2

for i:=1 to N do eax:=sqrt(eax);
может так ^^^

-----
Shalom ebanats!





Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 01 апреля 2005 18:32 · Поправил: DrGolova
· Личное сообщение · #3

> for i:=1 to N do eax:=sqrt(eax);
> может так ^^^

Ага, щаз... что получится для 27 == 3^3 ? =)



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 01 апреля 2005 18:38
· Личное сообщение · #4

сори.. это корень степени 2^n..

-----
Shalom ebanats!





Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 01 апреля 2005 20:00
· Личное сообщение · #5

Я где-то читал это как то по разложению Ньютона можно сделать, но там по-моему гемор



Ранг: 18.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 01 апреля 2005 20:08
· Личное сообщение · #6

как раз здесь http://algolist.manual.ru/maths/count_fast/inverse.php есть описание



Ранг: 39.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 01 апреля 2005 20:53
· Личное сообщение · #7

я пока не понял как этот алго работает, а именно откуда брать начальное приближение. при вычислении ряд все время расходится :-\



Ранг: 8.9 (гость)
Активность: 0.020
Статус: Участник

Создано: 01 апреля 2005 22:03 · Поправил: geRC
· Личное сообщение · #8

Вот, например, итеративный способ, позволяющий вычислять корень с любой точностью eps

x[i+1] = 1/2 * (x[i] + x / x[i])
x[0] = 1


Вычисляем пока | x[i] - x[i+1] | < eps

[edited]проглючило с тегами [i], исправил.



Ранг: 27.7 (посетитель), 2thx
Активность: 0.01=0.01
Статус: Участник

Создано: 02 апреля 2005 01:16
· Личное сообщение · #9

мож воспользоваться тем, что root(x,-n)=1/root(x,n) ?




Ранг: 536.4 (!), 171thx
Активность: 0.660.13
Статус: Администратор
Создатель CRACKL@B

Создано: 02 апреля 2005 12:11
· Личное сообщение · #10

А так нельзя разве: 27 ^ (1/3) = 3

-----
Всем не угодишь





Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 02 апреля 2005 17:21
· Личное сообщение · #11

можно, а как это программно дельфи это гребанную галочку поддерживает?



Ранг: 174.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 02 апреля 2005 18:18
· Личное сообщение · #12

Black Neuromancer пишет:
а как это программно дельфи это гребанную галочку поддерживает?

function Power(const Base, Exponent: Extended): Extended;
(unit Math)



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 02 апреля 2005 19:45
· Личное сообщение · #13

Black Neuromancer пишет:
у:=2*exp((1/(-x))*ln(x+exp((1/4)*ln(abs(x)))))


А чем хуже так ( каришок"n" степени из "x" ):
f(x)=exp(ln(abs(x))/n) * abs(x)/x ?


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
x,y:real;
begin
x:=-64;
y:=exp(ln(abs(x))/3)*abs(x)/x;
WriteLn(y);
ReadLn;
end.


Математика рулит!

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 02 апреля 2005 22:45
· Личное сообщение · #14

AlexZ


так другое значение получится у тебя там два abs, значение разные получатся

deNULL

О пасиб, попробую, надеюсь работает




Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 02 апреля 2005 22:58
· Личное сообщение · #15

deNULL

не подходит такая в ней проблема

вот на форуме на каком-то надыбал

[quote="Mish!"]У тебя в A получается отрицательное число. А функция Power не умеет возводить отрицательные числа в дробную степень:
[code]
function Power(const Base, Exponent: Extended): Extended;
begin
....
else
Result := Exp(Exponent * Ln(Base)) // <-- логарифм отр. числа не существует
end;
[/code][/quote]



Ранг: 39.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 03 апреля 2005 01:52
· Личное сообщение · #16

ещё проблемней это на асме реализовать



Ранг: 174.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 03 апреля 2005 02:40
· Личное сообщение · #17

Black Neuromancer пишет:
А функция Power не умеет возводить отрицательные числа в дробную степень

Если n целое, то

if Base >= 0 then
Result := Power(Base,1/n)
else
if n mod 2 = 1 then
Result := -Power(-Base,1/n) // n нечетное, минус выносится за знак корня
else
... // n четное, корень четной степени из отрицательного числа не существует

P.S. А математика действительно рулит



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 03 апреля 2005 02:57
· Личное сообщение · #18

Black Neuromancer
А не мог бы ты конкретно на ошибку ткнуть? =)
Ато и в Делфях и калькулятором считаю - все нормально.

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 0.0 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 апреля 2005 10:07
· Личное сообщение · #19

выход то простой тебе нужно со знаками развести??? оч проста
после считывания числа из которого ты корень извлекаешь, с помащью условия определяешь больше это число нуля либо меньше, потом после ввода степени корня, определяешь какой он если четный то тогда корень из атрицательного числа не извлекается, а если не четный то тогда изменяешь знак у введенного числа с которого ты корень извликаешь и извлекаешь уже из положительного а потом к нему приписываешь знак минуса, а вапщето от степени зависит колличество корней так что нужно тебе все продумать



Ранг: 0.0 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 апреля 2005 10:10
· Личное сообщение · #20

Black Neuromancer
а вапще я тебе саветую в модуле систем посмотреть функцию SQRT и разабраться как в ней чо пачом и ты ее переделаешь а потом приатачишь на форуме чтобы все ее видели



Ранг: 174.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 03 апреля 2005 16:59
· Личное сообщение · #21

El Maestro пишет:
выход то простой тебе нужно со знаками развести??? оч проста
после считывания числа из которого ты корень извлекаешь, с помащью условия определяешь больше это число нуля либо меньше, потом после ввода степени корня, определяешь какой он если четный то тогда корень из атрицательного числа не извлекается, а если не четный то тогда изменяешь знак у введенного числа с которого ты корень извликаешь и извлекаешь уже из положительного а потом к нему приписываешь знак минуса, а вапщето от степени зависит колличество корней так что нужно тебе все продумать

Ты мой последний пост видел?

El Maestro пишет:
а вапще я тебе саветую в модуле систем посмотреть функцию SQRT и разабраться как в ней чо пачом

Чушь. SQRT выполняется одной инструкцией ассемблера (fsqrt).



Ранг: 0.0 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 апреля 2005 20:46
· Личное сообщение · #22

deNULL пишет:
одной инструкцией ассемблера (fsqrt).

ну тады абломdeNULL пишет:
Ты мой последний пост видел?

признаюсь чесна не читал, теперь панятна что я тебя перефразиравал
ВЫВОД: способы мышления наших дифективных мазгов пахожи



Ранг: 136.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 03 апреля 2005 21:38
· Личное сообщение · #23

Хм. В чем проблема...

geRC предложил самый реальный способ.
Есть еще разложение степенной функции в ряд, но я ее не помню. Посмотри в учебнике по матану.




Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 03 апреля 2005 22:55
· Личное сообщение · #24

MC707

Гы ) Там не написано как это программно реализовать



Ранг: 136.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 04 апреля 2005 01:11
· Личное сообщение · #25

Дык е-мое

x(0)=1
x(1)=1/2*(x(0)+x/x(0))
i=1
eps = 0.01

while abs( x(i) - x(i-1) ) > eps
{
x(i+1) = 1/2 * (x(i) + x / x(i))
inc(i)
}

Вроде так


 eXeL@B —› Крэки, обсуждения —› Извлечение корня n-oй степени
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати