Комментарии 27
Даст ли это какой-то выигрыш в скорости вычисления по сравнению с рядом Тейлора, например?
Возведение в степень - не очень простая математика.
В точке pi/4 значения будут совпадать в точности, поэтому возьмите лучше pi/8. А еще лучше постройте и приведите в статье график ошибки от аргумента.
А у меня есть арктангес через аппроксимацию полиномом второй степени. Аппроксимируется собсно четверть окружности, потом всё сводится к ней. Надо было для обработки сквт. Собсно по четвертям окружности:
t = arctan(sin/cos)
t = PI/2-arctan(cos/sin)
t = PI/2+arctan(-cos/sin)
t = PI-arctan(sin/-cos)
t = -PI+arctan(-sin/-cos)
t = -PI/2-arctan(-cos/-sin)
t = -PI/2+arctan(cos/-sin)
t = -arctan(-sin/cos)
ф-я аппроксимации: y= -0.0915 x^2 + 0.3434x - 0.0015
если x < 0.1 то y = x;
Работает быстро, считать можно даже без плавающей точки.
Просто оставлю это здесь. Вдруг кто не знает.
Приближённая формула для вычисления десятичного логарифма числа X без калькулятора и даже без особых умственных усилий:
Целая часть - количество цифр в числе X минус один.
Дробная часть - первая цифра числа X плюс два.
Уточняющее исключение: дробная часть равна первой цифре исходного числа, если она единица или девятка
Примеры:
lg(456) = 2,6
lg(4567) = 3,6
lg(1234) = 3,1
lg(12345) = 4,1
lg(x / 10n) = lg(x) − n
lg(0.456) = lg(456 / 1000) = lg(456) − 3 = −0.4
Правила 2 и 3 сомнительны
lg(19) = 1.3
lg(42) = 1.6
lg(45) = 1.7
В первом примере, конечно, есть погрешность в десятых долях ответа. Считая "на глаз" lg(19) якобы должен быть равен 1.1, хотя 1.28 - точнее. Ну, куда деваться? Для кустарных прикидок сойдёт.
Во втором таких расхождений нет. Для lg(42): количество цифр - 2, значит целая часть ответа (2-1)=1. Дробная часть ответа равна 6, так как первая цифра в числе 42 - это цифра 4, а правило предлагает его увеличить на 2.
В третьем примере ответ около 1.65, так что с точностью до десятых результат хороший :-) Жить можно :-)
Осталось за малым -- научится вычислять возведение в степень 1.7.
Бхаскар I, 629 г. н.э.
А может проще и точнее хранить табличные значения для 1/4 волны (если ресурсы позволяют конечно)?
Все калькуляторы считают синусы кордиком (CORDIC). Для чего нужны лишь сдвиги, сложения и простейшие битовые операции. Приведённые же выше способы совсем не тривиальны, так как требуют операций умножения, деления и сложения над числами с плавающей точкой (или большими целочисленными).
Конечно, если есть FPU то разложение в ряд Тейлора -- быстрей. Но на условном 8-битном контроллере быстрей CORDIC.
Кстати да. CORDIC использовался и в 8087, и в целочисленных системах: например в этой старой статье есть реализация для 16-разрядных типов данных, хотя она может быть адаптирована для любой точности. Он действительно использует только сложение, вычитание и сдвиги и является быстро и гарантированно сходящимся. Возведение в нецелую степень выглядит не такой простой математикой.
псс, cordic на верилоге (переложен прикола ради с Си) не желаете? ))
А чего его минусят то? Верно говорит же)
Но зачем?
Теперь поместите вашу существенно нелинейную (с разрывами второго рода) функцию в правую часть дифуры, и наслаждайтесь, пытаясь интегрировать это численно
cos(x·pi/2)
функцией 1-xk
на интервале [0,1]
. Проблема в том, что в вычислительном плане в этом нет никакого смысла — вычисление возведения в дробную степень делается через логарифм и экспоненту, а они (особенно логарифм) намного более трудозатратны по сравнению с вычислением непосредственно синуса.Навязчивая идея посчитать синус угла, используя простые мат. операцииДержите вариант с тремя знаками после запятой в диапазоне [-pi/2,pi/2]:

Так в статье интересен не сам результат, а способ вывода и способ как до этого вывода дошли :-)
Как вот вы получили такой удивительно простой результат?
(a·x+b·x3)/(1+c·x2)
;2. Составил систему из двух уравнений, определяющих значение (1) функции и производной (0) при
x=pi/2
;3. решение дало значения коэффициентов
a
и b
выраженных через c
;4. коэффициент
c
подобрал экспериментально по графику, визуально минимизируя максимальное отклонение и аппроксимировал его рациональным числом;5. подставил все значения в исходную функцию и упростил.
Всё это конечно не вручную, а в Mathematica.

И точнее получается, 4 знака после запятой.
Кому по душе арбуз, а кому свиной хрящик.
Хочется точно, следуем учению брата Тейлора. Хочется быстро, делаем таблично.
Расчет значения синуса простой математикой