Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- double precyzja[] ={0.01,0.0001,0.000001};
- int liczba_wyrazow(double x, double precyzja){
- int i = 1;
- int suma = x;
- while(1){
- suma *= x*x /(2*i*(2*i+1));
- if(suma < precyzja) break;
- i++;
- }
- return i - 1;
- }
- double silnia(int s){
- if(s==0 || s==1) return 1;
- else return(s*silnia(s-1));
- }
- double potega(double x, int n ){
- double val = 1.0;
- int i;
- for(i=1; i<=n ;i++){
- val *= x;
- }
- return val;
- }
- double sinus(double x, int n){
- int i;
- double val = x;
- for(i=1; i<=n; i++){
- double p = potega(-1.0,i);
- double px = potega(x,2*i+1);
- double s=silnia(2*i+1);
- val += (p * px) / s;
- }
- return val;
- }
- double sinus_tyl(double x, int n){
- int i;
- double val = x;
- for(i=n; i>=1; i--){
- double p = potega(-1.0,i);
- double px = potega(x,2*i+1);
- double s=silnia(2*i+1);
- val += (p * px) / s;
- }
- return val;
- }
- double sinus_przod_z_zapamietaniem(double x, int n){
- int i;
- double val = x;
- double wyraz = x;
- for(i=1; i<=n; i++){
- wyraz *= x*x /(2*i*(2*i+1));
- if(i % 2 == 0) val += wyraz;
- else val -= wyraz;
- }
- return val;
- }
- double sinus_tyl_z_zapamietaniem(double x, int n){
- int i;
- double val = x;
- double wyraz = potega(x,2*n + 1)/silnia(2*n+1);
- for(i=n; i>=1; i--){
- wyraz /= x*x /(2*i*(2*i+1));
- if(i % 2 == 0) val += wyraz;
- else val -= wyraz;
- }
- return val;
- }
- void wypisz_wyniki(double x){
- int i;
- int n;
- for(i=0;i<3;i++){
- n = liczba_wyrazow(x,precyzja[i]);
- printf("%.10f\n",sin(x));
- printf("%.10f\n",sinus(x,n));
- printf("%.10f\n",sinus_tyl(x,n));
- printf("%.10f\n",sinus_tyl_z_zapamietaniem(x,n));
- printf("%.10f\n",sinus_przod_z_zapamietaniem(x,n));
- }
- }
- int main(){
- wypisz_wyniki(3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement