Advertisement
Guest User

Untitled

a guest
Oct 19th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double precyzja[] ={0.01,0.0001,0.000001};
  5.  
  6.  
  7.  
  8. int liczba_wyrazow(double x, double precyzja){
  9. int i = 1;
  10. int 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. wyraz *= x*x /(2*i*(2*i+1));
  69.  
  70. if(i % 2 == 0) val += wyraz;
  71. else val -= wyraz;
  72. }
  73. return val;
  74. }
  75.  
  76. double sinus_tyl_z_zapamietaniem(double x, int n){
  77. int i;
  78. double val = x;
  79. double wyraz = potega(x,2*n + 1)/silnia(2*n+1);
  80.  
  81. for(i=n; i>=1; i--){
  82. wyraz /= x*x /(2*i*(2*i+1));
  83.  
  84. if(i % 2 == 0) val += wyraz;
  85. else val -= wyraz;
  86. }
  87. return val;
  88. }
  89.  
  90. void wypisz_wyniki(double x){
  91. int i;
  92. int n;
  93. for(i=0;i<3;i++){
  94. n = liczba_wyrazow(x,precyzja[i]);
  95. printf("%.10f\n",sin(x));
  96. printf("%.10f\n",sinus(x,n));
  97. printf("%.10f\n",sinus_tyl(x,n));
  98. printf("%.10f\n",sinus_tyl_z_zapamietaniem(x,n));
  99. printf("%.10f\n",sinus_przod_z_zapamietaniem(x,n));
  100. }
  101. }
  102.  
  103.  
  104. int main(){
  105.  
  106. wypisz_wyniki(3);
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement