Задача: Синус
Исходник: Калькулятор синуса, язык: C# [code #546, hits: 13294]
автор: - [добавлен: 19.12.2007]
  1. public class SinCalculator
  2. {
  3. const double PIMul2 = Math.PI * 2.0;
  4. const double PIDiv2 = Math.PI / 2.0;
  5.  
  6. double[] _table;
  7. double _coef;
  8.  
  9. public SinCalculator(int tableSize)
  10. {
  11. _coef = PIDiv2 / tableSize;
  12. double[] table = new double[tableSize];
  13. for (int i = 0; i < table.Length; ++i)
  14. {
  15. table[i] = Math.Sin(_coef * i);
  16. }
  17. _table = table;
  18. }
  19.  
  20. public double Sin(double a)
  21. {
  22. // Используем свойства синуса для некоторого уменьшения размера таблицы.
  23. // Если будет сильно медленно, то можно просто таблицу сделать побольше в 4 раза
  24. if (a < 0) return -Sin(-a);
  25.  
  26. a = a - Math.Truncate(a / PIMul2) * PIMul2;
  27. if (a > Math.PI) return -Sin(a - Math.PI);
  28. if (a > PIDiv2) return Sin(Math.PI - a);
  29.  
  30. // Тут собственно возвращаем ближайшее из таблички
  31. return _table[(int)Math.Round(a / _coef)]
  32. }
  33. }
Источник: http://rsdn.ru/forum/Message.aspx?mid=2129805&only=1

+добавить реализацию