Разложение sh(x) в ряд

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Здравствуйте, у меня вопрос насчет программы из поста #20.
Я по началу не обратил внимания, но если аргуент у функции отрицательный, то ее значение расходится со значением функции sinh . И чем больше отрицательное число по модулю, тем больше разница в значениях.
Подскажите пожалуйста почему так происходит и как это перебороть? :confused:
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Подскажите, пожалуйста. Ведь по алгоритму все вроде логично, но разница, тем не менее, появляяется. Не пойму где косяк. :confused:
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):у меня вопрос насчет программы из поста #20.
В посте №20 нет кода.
&quot писал(а):по алгоритму все вроде логично, но разница, тем не менее, появляяется
Выкладывайте свой код
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

В посте №20 нет кода.
Пардон, промазал. Имел ввиду пост №18.
Я использую функцию оттуда.
Это несколько измененный airyashov ваш код.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Это несколько измененный airyashov ваш код.
В этом посте была изменена основная часть алгоритма, думаю этот вопрос именно к airyashov
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Понятно.
Откровенно говоря я до сих пор не пойму смысл строк
[Syntax="ASM"]
test ax, 01000010100000000b
jz cycle
[/Syntax]
Почему ах тестируется именно с 01000010100000000b ?
В ах на тот момент хранится результат сравнения.
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Я думаю при оценке погрешности результат
т.е.
Это сравнение соотвествует условию st(0)>e, т.е цикл выполняется пока оно истина
тут по модулю сравнивать надо, затра проверю на работе
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Я понимаю, что это должно быть условием выхода из цикла. Мне не понятен сам механизм. Не ясно откуда взялось число 01000010100000000b. А насчет разночтений, проверьте пожалуйста.
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Код: Выделить всё

#include <iostream.h>
#include <math.h>

double shx(double argument, double precision)
{
	double	 factorial = 2;
	double	 function;
	_asm
	{
	fld argument
	fld st(0)
        cycle:
	fmul argument
	fmul argument
	fdiv factorial
	fld factorial
	fld1
	fadd
	fdiv st(1), st(0)
	fld1
	fadd
	//fdiv st(1), st(0) // ? «»??? nN???, ?N?????a? o st(1)
	fstp factorial
    	fadd st(1), st(0)

        fld st(0)
        fabs
	fcomp precision

	fstsw ax
        sahf
        ja cycle

	fstp factorial 
        fstp function
	}
        cout<<factorial<<endl;
	return function;
}

int main(int argc, char* argv[])
{
       long double     x=-2 ,e=0.000001 ;
        char ch;
        cout<<shx(x,e)<<endl<<sinh(x)<<endl;
        cin.get(ch);
        return 0;
}
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Спасибо большое, работает.
Ответить