fork(2) download
  1. #include <math.h>
  2. #include <stdio.h>
  3.  
  4. class SinCos
  5. {
  6. public:
  7. SinCos()
  8. {
  9. double step = 6.28318530717958647692 / 4096.0f;
  10. sinTable = new float[4099];
  11. cosTable = new float[4099];
  12. int index = 0;
  13. for (double i = 0; i < 6.28318530717958647692; i += step)
  14. {
  15. sinTable[index] = sin(i);
  16. cosTable[index] = cos(i);
  17. index++;
  18. }
  19. maxIdx = index;
  20. }
  21.  
  22. float getSin(float val)
  23. {
  24. val = fmod(val, 6.28318530717958647692);
  25. return sinTable[(int)(4096.0f * val / 6.28318530717958647692)];
  26. }
  27. float getCos(float val)
  28. {
  29. val = fmod(val, 6.28318530717958647692);
  30. return cosTable[(int)(4096.0f * val / 6.28318530717958647692)];
  31. }
  32.  
  33. float maxSinDelta();
  34. float maxCosDelta();
  35.  
  36. float* sinTable;
  37. float* cosTable;
  38. int maxIdx;
  39. };
  40.  
  41. float SinCos::maxCosDelta()
  42. {
  43. float maxval = 0;
  44. for(int i = 0; i < maxIdx; ++i)
  45. {
  46. float delta = fabs(cosTable[i] - cosTable[(i+1)%maxIdx]);
  47. if (maxval < delta) maxval = delta;
  48. }
  49. return maxval;
  50. }
  51.  
  52. float SinCos::maxSinDelta()
  53. {
  54. float maxval = 0;
  55. for(int i = 0; i < maxIdx; ++i)
  56. {
  57. float delta = fabs(sinTable[i] - sinTable[(i+1)%maxIdx]);
  58. if (maxval < delta) maxval = delta;
  59. }
  60. return maxval;
  61. }
  62.  
  63.  
  64. int main()
  65. {
  66. SinCos s;
  67. printf("MaxDelte sin = %f, cos = %f\n", s.maxSinDelta(), s.maxCosDelta());
  68. }
  69.  
  70.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
MaxDelte sin = 0.001534, cos = 0.001534