Русский / Russian English / Английский

Сейчас на форуме: Deputat1988, ugsuifi0, hlmadip (+8 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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


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

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

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

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

Ранг: 309.8 (мудрец)
Статус: Участник

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

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


Ранг: 199.6 (ветеран)
Статус: Участник
www.uinc.ru

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

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

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

Ранг: 309.8 (мудрец)
Статус: Участник

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

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


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

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

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

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

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

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

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

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

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

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

Создано: 1 апреля 2005 22:03 · Поправил: geRC New!
Цитата · Личное сообщение · #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 (посетитель)
Статус: Участник

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

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


Ранг: 535.7 (!)
Статус: Администратор
Создатель CRACKL@B

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

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


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

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

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

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

Создано: 2 апреля 2005 18:18 New!
Цитата · Личное сообщение · #12

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

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

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

Создано: 2 апреля 2005 19:45 New!
Цитата · Личное сообщение · #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.


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


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

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

AlexZ


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

deNULL

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


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

Создано: 2 апреля 2005 22:58 New!
Цитата · Личное сообщение · #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 (посетитель)
Статус: Участник

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

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

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

Создано: 3 апреля 2005 02:40 New!
Цитата · Личное сообщение · #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 (наставник)
Статус: Участник
UPX Killer -d

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

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

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

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

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

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

Создано: 3 апреля 2005 10:10 New!
Цитата · Личное сообщение · #20

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

MC707

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

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

Создано: 4 апреля 2005 01:11 New!
Цитата · Личное сообщение · #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й степени

Видеокурс ВЗЛОМ