Re: Разложение sh(x) в ряд
Добавлено: 13 апр 2008, 11:45
Ну, в общем, дошел я до следующего
[Syntax='C++']
double sh(float argument, float precision)
{
int factorial = 2;
double function;
asm
{
fld argument // загрузим на стек первый член
fld st(0) // скопируем его, в ST(1) будет храниться сумма
@cycle:
fmul argument // получаем след. член, умножаем пред. на Х^2
fmul argument
fdiv factorial // делим на один из элементов факториала, поскольку
fld factorial // в знаменателе факториал идет с шагом 2,
fld1 // то делим еще и на следущий элемент
fadd // здесь добавляем 1
fdiv st(1), st(0) // и делим, результат в st(1)
fld1 // теперь перейдем к след. элементу факториала
fadd // добавим еще 1
fdiv st(1), st(0) // и опять делим, результат в st(1)
fstp factorial /* и сохраним текущий множитель факториала, теперь
в St(0) - текущий элемент последов. */
fadd st(1), st(0) // а в St(1) стала сумма
fcom precision // сравниваем st(0) с точностью
jl @cycle // меньше? к cycle!!!
//fxch st(1)
fst function // Сохраняем
}
return function;
}
[/Syntax]
Но работает не корректно. Может я чего не верно делаю?
[Syntax='C++']
double sh(float argument, float precision)
{
int factorial = 2;
double function;
asm
{
fld argument // загрузим на стек первый член
fld st(0) // скопируем его, в ST(1) будет храниться сумма
@cycle:
fmul argument // получаем след. член, умножаем пред. на Х^2
fmul argument
fdiv factorial // делим на один из элементов факториала, поскольку
fld factorial // в знаменателе факториал идет с шагом 2,
fld1 // то делим еще и на следущий элемент
fadd // здесь добавляем 1
fdiv st(1), st(0) // и делим, результат в st(1)
fld1 // теперь перейдем к след. элементу факториала
fadd // добавим еще 1
fdiv st(1), st(0) // и опять делим, результат в st(1)
fstp factorial /* и сохраним текущий множитель факториала, теперь
в St(0) - текущий элемент последов. */
fadd st(1), st(0) // а в St(1) стала сумма
fcom precision // сравниваем st(0) с точностью
jl @cycle // меньше? к cycle!!!
//fxch st(1)
fst function // Сохраняем
}
return function;
}
[/Syntax]
Но работает не корректно. Может я чего не верно делаю?