Главная
>>
Каталог задач
>>
Математика
>>
Тригонометрия
>>
Синус
Синус
реализации: C#, количество: 1
Aвтор: this
Дата: 19.12.2007
Просмотров: 51587
Рейтинг:
3/7,4.97(3172)
+
реализации(исходники)
+добавить
Коллекция вариантов кода расчета синуса.
Реализации:
C#(1),
C++(1)
+добавить реализацию
1)
Калькулятор синуса, code #546[автор:-]
public class SinCalculator
{
const double PIMul2 = Math.PI * 2.0;
const double PIDiv2 = Math.PI / 2.0;
double[] _table;
double _coef;
public SinCalculator(int tableSize)
{
_coef = PIDiv2 / tableSize;
double[] table = new double[tableSize];
for (int i = 0; i < table.Length; ++i)
{
table[i] = Math.Sin(_coef * i);
}
_table = table;
}
public double Sin(double a)
{
// Используем свойства синуса для некоторого уменьшения размера таблицы.
// Если будет сильно медленно, то можно просто таблицу сделать побольше в 4 раза
if (a < 0) return -Sin(-a);
a = a - Math.Truncate(a / PIMul2) * PIMul2;
if (a > Math.PI) return -Sin(a - Math.PI);
if (a > PIDiv2) return Sin(Math.PI - a);
// Тут собственно возвращаем ближайшее из таблички
return _table[(int)Math.Round(a / _coef)]
}
}