Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. #include <math.h>
  2. #include <time.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. //sin(x^2 + 5) * 4
  8. int main()
  9. {
  10. double a, b, step, x, f, t , e , k;
  11. printf("Enter the lower limit\n");
  12. scanf_s("%lf", &a);
  13. printf("Enter upper limit\n");
  14. scanf_s("%lf", &b);
  15. printf("Enter step\n");
  16. scanf_s("%lf", &step);
  17. LARGE_INTEGER frequency, start, finish;
  18. x = a;
  19. f = 0;
  20. e = 5;
  21. k = 4;
  22. QueryPerformanceFrequency(&frequency); // частота(тактов в секунду)
  23. QueryPerformanceCounter(&start); // количество тактов после включения компа
  24. _asm
  25. {
  26. finit
  27.  
  28. fld b
  29. fld x
  30. loop_start :
  31. fcom
  32. fstsw ax; сохраняем слово состояния
  33. and ah, 01000101b; проверяем значения соответствующих флагов
  34. jz loop_end; если число в стеке больше, чем число b
  35.  
  36. fld x
  37. fmul x//умножаю ST(0) на x
  38. fadd e//прибавляю 5
  39.  
  40. fsin//беру cинус ST(0)
  41.  
  42. fmul k //умножаю ST(0) на 4
  43.  
  44. fadd f
  45. fstp f//достаю из стека сумму
  46.  
  47. fadd step//прибавляю шаг
  48. fst x//достаю x из стека
  49. jmp loop_start
  50. loop_end :
  51. fwait
  52. }
  53. QueryPerformanceCounter(&finish); // количество тактов после выполнения вычислений
  54. t = (double)(finish.QuadPart - start.QuadPart) / (double)frequency.QuadPart; // QuadPart - часть объединения LI для пк, поддерж 64-битку
  55. printf("Time ASM is %lf seconds.\n", t);
  56. printf("%lf\n", f);
  57.  
  58. // с помощью библиотеки
  59. QueryPerformanceCounter(&finish);
  60. t = (double)(finish.QuadPart - start.QuadPart) / (double)frequency.QuadPart;
  61. printf("Time ASM is %lf seconds.\n", t);
  62. printf("%lf\n", f);
  63.  
  64. x = a;
  65. f = 0;
  66. double temp = 0;
  67. QueryPerformanceFrequency(&frequency);
  68. QueryPerformanceCounter(&start);
  69. while (x <= b)
  70. {
  71. temp = pow(x, 2) + 5;
  72. f += sin(temp) * 4;
  73. x += step;
  74. }
  75. QueryPerformanceCounter(&finish);
  76. t = (double)(finish.QuadPart - start.QuadPart) / (double)frequency.QuadPart;
  77. printf("Time C is %lf seconds.\n", t);
  78. printf("%lf\n", f);
  79. system("pause");
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement