Посл.ответ |
Сообщение |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 01 апреля 2005 16:39 · Личное сообщение · #1
Вычисляю на Дельфях так по старинке считаю, но такая вот зрень когда число X отрицательно, то логарифм не считается. А мне нужно, чтобы считал выражение при например -3.
у:=2*exp((1/(-x))*ln(x+exp((1/4)*ln(abs(x)))))
| Сообщение посчитали полезным: |
|
Ранг: 309.8 (мудрец), 21thx Активность: 0.17↘0 Статус: Участник
|
Создано: 01 апреля 2005 18:20 · Личное сообщение · #2
for i:=1 to N do eax:=sqrt(eax);
может так ^^^
----- Shalom ebanats! | Сообщение посчитали полезным: |
Ранг: 199.6 (ветеран), 12thx Активность: 0.1↘0 Статус: Участник 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.17↘0 Статус: Участник
|
Создано: 01 апреля 2005 18:38 · Личное сообщение · #4
сори.. это корень степени 2^n..
----- Shalom ebanats! | Сообщение посчитали полезным: |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 01 апреля 2005 20:00 · Личное сообщение · #5
Я где-то читал это как то по разложению Ньютона можно сделать, но там по-моему гемор
| Сообщение посчитали полезным: |
Ранг: 18.1 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 01 апреля 2005 20:08 · Личное сообщение · #6
как раз здесь http://algolist.manual.ru/maths/count_fast/inverse.php есть описание
| Сообщение посчитали полезным: |
Ранг: 39.1 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 01 апреля 2005 20:53 · Личное сообщение · #7
я пока не понял как этот алго работает, а именно откуда брать начальное приближение. при вычислении ряд все время расходится :-\
| Сообщение посчитали полезным: |
Ранг: 8.9 (гость) Активность: 0.02↘0 Статус: Участник
|
Создано: 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.66↘0.13 Статус: Администратор Создатель CRACKL@B
|
Создано: 02 апреля 2005 12:11 · Личное сообщение · #10
А так нельзя разве: 27 ^ (1/3) = 3
----- Всем не угодишь | Сообщение посчитали полезным: |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 02 апреля 2005 17:21 · Личное сообщение · #11
можно, а как это программно дельфи это гребанную галочку поддерживает?
| Сообщение посчитали полезным: |
Ранг: 174.2 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 02 апреля 2005 18:18 · Личное сообщение · #12
Black Neuromancer пишет:
а как это программно дельфи это гребанную галочку поддерживает?
function Power(const Base, Exponent: Extended): Extended;
(unit Math)
| Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник 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.13↘0 Статус: Участник программист априори
|
Создано: 02 апреля 2005 22:45 · Личное сообщение · #14
AlexZ
так другое значение получится у тебя там два abs, значение разные получатся
deNULL
О пасиб, попробую, надеюсь работает
| Сообщение посчитали полезным: |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 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.03↘0 Статус: Участник
|
Создано: 03 апреля 2005 01:52 · Личное сообщение · #16
ещё проблемней это на асме реализовать
| Сообщение посчитали полезным: |
Ранг: 174.2 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 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.22↘0 Статус: Участник UPX Killer -d
|
Создано: 03 апреля 2005 02:57 · Личное сообщение · #18
Black Neuromancer
А не мог бы ты конкретно на ошибку ткнуть? =)
Ато и в Делфях и калькулятором считаю - все нормально.
----- Я медленно снимаю с неё UPX... *FF_User* | Сообщение посчитали полезным: |
Ранг: 0.0 (гость) Активность: 0.02↘0 Статус: Участник
|
Создано: 03 апреля 2005 10:07 · Личное сообщение · #19
выход то простой тебе нужно со знаками развести??? оч проста
после считывания числа из которого ты корень извлекаешь, с помащью условия определяешь больше это число нуля либо меньше, потом после ввода степени корня, определяешь какой он если четный то тогда корень из атрицательного числа не извлекается, а если не четный то тогда изменяешь знак у введенного числа с которого ты корень извликаешь и извлекаешь уже из положительного а потом к нему приписываешь знак минуса, а вапщето от степени зависит колличество корней так что нужно тебе все продумать
| Сообщение посчитали полезным: |
Ранг: 0.0 (гость) Активность: 0.02↘0 Статус: Участник
|
Создано: 03 апреля 2005 10:10 · Личное сообщение · #20
Black Neuromancer
а вапще я тебе саветую в модуле систем посмотреть функцию SQRT и разабраться как в ней чо пачом и ты ее переделаешь а потом приатачишь на форуме чтобы все ее видели
| Сообщение посчитали полезным: |
Ранг: 174.2 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 03 апреля 2005 16:59 · Личное сообщение · #21
El Maestro пишет:
выход то простой тебе нужно со знаками развести??? оч проста
после считывания числа из которого ты корень извлекаешь, с помащью условия определяешь больше это число нуля либо меньше, потом после ввода степени корня, определяешь какой он если четный то тогда корень из атрицательного числа не извлекается, а если не четный то тогда изменяешь знак у введенного числа с которого ты корень извликаешь и извлекаешь уже из положительного а потом к нему приписываешь знак минуса, а вапщето от степени зависит колличество корней так что нужно тебе все продумать
Ты мой последний пост видел?
El Maestro пишет:
а вапще я тебе саветую в модуле систем посмотреть функцию SQRT и разабраться как в ней чо пачом
Чушь. SQRT выполняется одной инструкцией ассемблера (fsqrt).
| Сообщение посчитали полезным: |
Ранг: 0.0 (гость) Активность: 0.02↘0 Статус: Участник
|
Создано: 03 апреля 2005 20:46 · Личное сообщение · #22
deNULL пишет:
одной инструкцией ассемблера (fsqrt).
ну тады аблом deNULL пишет:
Ты мой последний пост видел?
признаюсь чесна не читал, теперь панятна что я тебя перефразиравал
ВЫВОД: способы мышления наших дифективных мазгов пахожи
| Сообщение посчитали полезным: |
Ранг: 136.3 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 03 апреля 2005 21:38 · Личное сообщение · #23
Хм. В чем проблема...
geRC предложил самый реальный способ.
Есть еще разложение степенной функции в ряд, но я ее не помню. Посмотри в учебнике по матану.
| Сообщение посчитали полезным: |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 03 апреля 2005 22:55 · Личное сообщение · #24
MC707
Гы ) Там не написано как это программно реализовать
| Сообщение посчитали полезным: |
Ранг: 136.3 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 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)
}
Вроде так
| Сообщение посчитали полезным: |