помогите пожалуйста, почти вся лаба сделана в одном только не сходится результат
Код:
#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: "
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)
реализация на ассемблере в самом начале. Не сходится результат. уже измучалась, что не так то?
аналогично сделано возведение двойки и в степень и вроде бы всё работает..