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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.04.2007, 19:22   #1
$Дмитрий
Новичок
Джуниор
 
Регистрация: 23.04.2007
Сообщений: 1
По умолчанию как найти корень из числа

как найти корень в n-ой степени из числа
$Дмитрий вне форума
Старый 23.04.2007, 19:42   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Power(a,1/n)
Carbon вне форума
Старый 23.04.2007, 19:44   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

результат:=EXP(1/<степень>*Ln(числа));
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 23.04.2007, 19:48   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Лучше юзать Power, т.к. он не вылетает при основании <=0.
Carbon вне форума
Старый 23.04.2007, 19:50   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Да? сравните использование памяти при использовании power.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 23.04.2007, 19:52   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Если критична память нужно юзать asm.
Carbon вне форума
Старый 23.04.2007, 20:01   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

function Power(const Base, Exponent: Extended): Extended;
const
Max : Double = MaxInt;
var
IntExp : Integer;
asm
fld Exponent
fld st {copy to st(1)}
fabs {abs(exp)}
fld Max
fcompp {leave exp in st(0)}
fstsw ax
sahf
jb @@RealPower {exp > MaxInt}
fld st {exp in st(0) and st(1)}
frndint {round(exp)}
fcomp {compare exp and round(exp)}
fstsw ax
sahf
jne @@RealPower
fistp IntExp
mov eax, IntExp {eax=Trunc(Exponent)}
mov ecx, eax
cdq
fld1 {Result=1}
xor eax, edx
sub eax, edx {abs(exp)}
jz @@Exit
fld Base
jmp @@Entry
@@Loop:
fmul st, st {Base * Base}
@@Entry:
shr eax, 1
jnc @@Loop
fmul st(1), st {Result * X}
jnz @@Loop
fstp st
cmp ecx, 0
jge @@Exit
fld1
fdivrp {1/Result}
jmp @@Exit
@@RealPower:
fld Base
ftst
fstsw ax
sahf
jz @@Done
fldln2
fxch
fyl2x
fxch
fmulp st(1), st
fldl2e
fmulp st(1), st
fld st(0)
frndint
fsub st(1), st
fxch st(1)
f2xm1
fld1
faddp st(1), st
fscale
@@Done:
fstp st(1)
@@Exit:
end;



function Exp(const X: Extended): Extended;
asm
{ e**x = 2**(x*log2(e)) }
FLD X
FLDL2E { y := x*log2e; }
FMUL
FLD ST(0) { i := round(y); }
FRNDINT
FSUB ST(1), ST { f := y - i; }
FXCH ST(1) { z := 2**f }
F2XM1
FLD1
FADD
FSCALE { result := z * 2**i }
FSTP ST(1)
end;

function Ln(const X: Extended): Extended;
asm
FLD X
FLDLN2
FXCH
FYL2X
FWAIT
end;


Сравнивайте. Плюс: использование Power увеличит ваш дистрибутив на размер модуля Math не забывайте об этом.

* и деление не стал приводить к атомарности, по причине того что и то и другое в исходных кодах функций используется
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось zetrix; 25.04.2007 в 19:07.
Квэнди вне форума
Старый 26.04.2007, 13:40   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Тема закрыта, во избежании массового наказания за флуд!
Протесты в личку!
zetrix вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти два наибольших отрицательных числа Makarov Паскаль, Turbo Pascal, PascalABC.NET 8 14.06.2008 17:57
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49
Джентльмены, помогите, пжлст. каким оператором высчитать корень 5-ой степени числа? Osi@ Помощь студентам 32 03.10.2007 19:52
Найти количество различных цифр данного натурального числа. stalker Паскаль, Turbo Pascal, PascalABC.NET 10 22.05.2007 17:45