Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double precyzja[] ={0.01,0.0001,0.00000000001};
  5.  
  6.  
  7.  
  8. int liczba_wyrazow(double x, double precyzja){
  9. int i = 1;
  10. double suma = x;
  11. while(1){
  12. suma *= x*x /(2*i*(2*i+1));
  13. if(suma < precyzja) break;
  14.  
  15. i++;
  16. }
  17. return i - 1;
  18. }
  19.  
  20. double silnia(int s){
  21. if(s==0 || s==1) return 1;
  22. else return(s*silnia(s-1));
  23. }
  24.  
  25. double potega(double x, int n ){
  26. double val = 1.0;
  27. int i;
  28. for(i=1; i<=n ;i++){
  29. val *= x;
  30. }
  31. return val;
  32. }
  33.  
  34. double sinus(double x, int n){
  35. int i;
  36. double val = x;
  37.  
  38. for(i=1; i<=n; i++){
  39. double p = potega(-1.0,i);
  40. double px = potega(x,2*i+1);
  41. double s=silnia(2*i+1);
  42.  
  43. val += (p * px) / s;
  44. }
  45. return val;
  46. }
  47.  
  48. double sinus_tyl(double x, int n){
  49. int i;
  50. double val = x;
  51.  
  52. for(i=n; i>=1; i--){
  53. double p = potega(-1.0,i);
  54. double px = potega(x,2*i+1);
  55. double s=silnia(2*i+1);
  56.  
  57. val += (p * px) / s;
  58. }
  59. return val;
  60. }
  61.  
  62. double sinus_przod_z_zapamietaniem(double x, int n){
  63. int i;
  64. double val = x;
  65. double wyraz = x;
  66.  
  67. for(i=1; i<=n; i++){
  68.  
  69.  
  70. if(i % 2 == 0) val += wyraz;
  71. else val -= wyraz;
  72.  
  73. wyraz *= x*x /(2*i*(2*i+1));
  74. }
  75. return val;
  76. }
  77.  
  78. double sinus_tyl_z_zapamietaniem(double x, int n){
  79. int i;
  80. double val = x;
  81. double wyraz = potega(x,2*n + 1)/silnia(2*n+1);
  82.  
  83. for(i=n; i>=1; i--){
  84.  
  85.  
  86. if(i % 2 == 0) val += wyraz;
  87. else val -= wyraz;
  88.  
  89. wyraz /= x*x /(2*i*(2*i+1));
  90. }
  91. return val;
  92. }
  93.  
  94. void wypisz_wyniki(double x){
  95. int i;
  96. int n;
  97. for(i=0;i<20;i++){
  98. n = liczba_wyrazow(x,precyzja[i]);
  99. printf("%.10f\n",sin(x));
  100. printf("%.10f\n",sinus(x,n));
  101. printf("%.10f\n",sinus_tyl(x,n));
  102. printf("%.10f\n",sinus_tyl_z_zapamietaniem(x,n));
  103. printf("%.10f\n",sinus_przod_z_zapamietaniem(x,n));
  104. }
  105. }
  106.  
  107.  
  108. int main(){
  109.  
  110. wypisz_wyniki(2);
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement