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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2012, 12:48   #1
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию не сходится результат

помогите пожалуйста, почти вся лаба сделана в одном только не сходится результат

Код:
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double res = 0, x2, y2;
// Вариант 11  задание 2          (e^-3.2x/cosx) + (ln(2^x)/(1 + sin x))

double x; 
    cout<<"enter x: ";   cin >> x;
double a = 180, b = x, e = M_E, k = -2.3, c1 =1, t2, aa = 2, t1, ff;
double y,z;
unsigned short int vf;
_asm
{
	fld x
	fmul k
	fstp k
	// возводим е в степень и записываем результат в t2 
		fld1
		fld e		//
		fyl2x		//сделали log2(e)
		fld k		//
		fstcw vf;//сохраняем слово управления
		or word ptr vf,0000100000000000b;//устанавливаем биты так, чтобы
		and word ptr vf,1111101111111111b;//значение округлялось в большую сторону
		fldcw vf;//обновляем слово управления

		fld st(0) 	//делаем копию
		frndint   	// округляем st(0)
		fsub c1
		fxch st(1) //поменяли местами дробное и целое    
		fsub st(0),st(1) //получили дробную часть
		
		f2xm1		//сделали возведение двойки в дробную часть числа
		fld1     //плюсуем единичку для баланса f2xm1
		faddp st(1),st
		fscale	//сделали возведение двойки в целую часть числа
		fstp t2//результат возведения в степень

		//получаем cosx и делим  е в степени на cosx, записываем результат в t2

		fld x
		/*fmul x //умножила на пи
		//fstp res
		fld res //помножить 180 и разделить на пи
		fldpi
		fsub
		fstp y    //x в градусах*/
		fcos
		fstp res    //cos х
		fld t2
		fsub res
		fstp t2 //записали первый результат

		//возводим 2 степень x и записываем результат в res
		fld1
		fld aa//положили двойку
		fyl2x		//сделали log2(2)
		fld x
		fld st(0) 	//делаем копию
		frndint   	// округляем st(0)
		fsub c1
		fxch st(1) //поменяли местами дробное и целое    
		fsub st(0),st(1) //получили дробную часть
		
		f2xm1		//сделали возведение двойки в дробную часть числа
		fld1     //плюсуем единичку для баланса f2xm1
		faddp st(1),st
		fscale	//сделали возведение двойки в целую часть числа
		fstp res//результат возведения в степень

//вычисляем результат ln(2^x) записываем в t1

		fld1        // загрузили 1.0 - нужна для fyl2x
		fld res		//положили x
		fyl2x       // 1.0*log2(x*x)
		fldln2
		fmul
		fstp t1	
		
		//вычисляем sinx и прибавляем еденицу, записываем результат в res

		fld x    
		fsin
		fstp res    //cos х
		fld1
		fadd res
		fstp res

		//делим t1 на res
		fld t1
		fsub res

		//складываем 2 части выражения
		fadd t2
		fstp res
}
cout << "result: "<< res << endl; 
// Вариант 11  задание 2          (e^-2.3x/cosx) + (ln(2^x)/(1 + sin x))

double resc;
//(pow(e, -2.3)/cos(x)) косяк
double pp = -2.3*x;
resc = pow(e, pp);
cout << "result C++: "<< (pow(e, -2.3)/cos(x)) + (log(pow(2,x))/(1 + sin(x)))<< endl; 
cout<<resc;
system ("pause");
return 0;
}
Всё вычисляется верно кроме pow(e, -2.3)
реализация на ассемблере в самом начале. Не сходится результат. уже измучалась, что не так то?
аналогично сделано возведение двойки и в степень и вроде бы всё работает..

Последний раз редактировалось PinkPink; 02.03.2012 в 12:52.
PinkPink вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сходится Т_т L6go1as Общие вопросы C/C++ 13 04.01.2012 20:08
Ответ не сходится (ошибка в коде) TimurMaster Общие вопросы C/C++ 3 13.09.2011 21:40
Не сходится рисунок !) Weyner Помощь студентам 0 26.12.2010 16:22
Не сходится с ответом... Paul Oakenfold Помощь студентам 5 19.02.2009 18:09
Не сходится с ответом... Paul Oakenfold Помощь студентам 5 16.02.2009 16:06