Advertisement
Leeen

sys_pro_6

May 21st, 2020
1,614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6. //вариант 20:
  7. //arctg(x), |x| < = 1
  8.  
  9. void calc(double x, double Epsilon) {
  10.     double cm1 = -1, c1 = 1, c2 = 2, c3 = 3;
  11.     double previous_value;
  12.     double result;
  13.     int n = 0;
  14.     _asm {
  15.  
  16.         finit // инициализация сопроцессора
  17.         fld x // s0 = -1
  18.         fst result // result = x
  19.         fstp previous_value // previous_value = x
  20.  
  21.  
  22.         begin_loop:
  23.             fld n //st0 = n
  24.             fmul c2 //st0 = 2n
  25.             fadd c3 //st0 = 2n+3
  26.             fld n //st0 = n, st1 = 2n+3
  27.             fmul c2
  28.             fadd c1 //st0 = 2n+1, st1 = 2n+3
  29.             fdivp st(1), st //st0 = (2n + 1)/(2n + 3)
  30.             fmul cm1
  31.             fmul x
  32.             fmul x //st0 = -x^2*(2n + 1)/(2n + 3)
  33.             fmul previous_value //st0 = Cn * (-x^2*(2n + 1)/(2n + 3)) == Cn+1
  34.             fadd result //st0 = Cn * (-x^2*(2n + 1)/(2n + 3)) + сумма предыдущих членов
  35.             fstp result // result = сумма предыдущих членов + текущий
  36.  
  37.             fld n //st0 = n
  38.             fadd c1 //st0 = n + 1
  39.             fstp n // n = n + 1
  40.  
  41.             fld previous_value //st0 = previous_value
  42.             fabs // st0 = |previous_value|
  43.             fld Epsilon // st0 = Epsilon, st1 = |previous_value|
  44.             fcomp st(1) // сравнение Epsilon и текущего члена
  45.             fstsw ax //записываем значение в регистр ax
  46.             ja end_of_code
  47.             jb begin_loop
  48.  
  49.        end_of_code:
  50.     }
  51.     cout << "Result: "<< result <<"\nn: " << n + 1 << "\nDelta: " << abs(atan(x) - result);
  52. }
  53.  
  54. int main() {
  55.     cout << "x: ";
  56.     double x;
  57.     cin >> x;
  58.     if (abs(x) > 1)
  59.     {
  60.         cout << "Incorrect Data: |x| > 1" << endl;
  61.         return 0;
  62.     }
  63.     cout << endl << "Epsilon: ";
  64.     double Epsilon;
  65.     cin >> Epsilon;
  66.     cout << endl;
  67.  
  68.     calc(x, Epsilon);
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement