fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class SinusApp
  6. {
  7. public static Double scanDouble( Scanner in )
  8. {
  9. return ( ( in.hasNextDouble() ) ? in.nextDouble() : null );
  10. }
  11.  
  12. public static double pow2( double x ) //вторая степень
  13. {
  14. return x*x;
  15. }
  16.  
  17. public static void main( String[] args )
  18. {
  19. // рабочие переменные
  20. double x, e, d, r;
  21. long n, nMax = Long.MAX_VALUE; // лимит числа итераций чтобы избежать бесконечного цикла
  22.  
  23.  
  24. // ввод данных - аргумента функции и заданной погрешности
  25. Scanner in = new Scanner(System.in);
  26.  
  27. x = scanDouble( in );
  28. e = scanDouble( in );
  29.  
  30. in.close();
  31.  
  32. for( d = 0, r = x, n = 2; n < nMax; n++ ) // основной цикл вычислений
  33. {
  34. r = r * ( 1 - pow2( x ) / ( pow2( n - 1 ) * pow2( Math.PI ) ) );
  35. d = Math.sin( x ) - r ;
  36. if( Math.abs( d ) <= Math.abs( e ) ) break;
  37. }
  38.  
  39. // вывод результата
  40. System.out.printf("sin(x) = %f\n", Math.sin( x ) );
  41. System.out.printf("calculated sinus = %f\n", r );
  42. System.out.printf("inaccuracy = %f\n", d );
  43. System.out.printf("number of iterations: %d\n", n );
  44.  
  45. }
  46. }
  47.  
Success #stdin #stdout 0.18s 322368KB
stdin
12 0.56
stdout
sin(x) = -0.536573
calculated sinus = -1.061362
inaccuracy = 0.524789
number of iterations: 22