История изменений
Исправление grem, (текущая версия) :
Как?
Примерно как ты написал:
float mycos(const float x) {
float _sin = mysin(x);
return sqrt(1-_sin*_sin);
}
Только здесь:
- не учитывается изменение знака косинуса, но для его учёта придётся if'ов понапихать и не факт, что тогда прямое вычисление будет медленее;
- повторно вычисляется уже вычисленное значение синуса, вместо подстановки уже вычисленного ранее (одна и та же величина высчитывается два раза вместо одного) - проще уж тогда сразу напрямую косинус посчитать, а не через тригонометрическую формулу;
- формула для синуса через используемое разложение (x - x3/6 + x3*x*x/120 - x3*x3*x/5040) всё равно неверна для используемых значений x: подставь x=4 и узри, что значение синуса внезапно больше 1 по модулю и при дальнейшем увеличении x продолжает очень быстро расти.
Исходная версия grem, :
Как?
Примерно как ты написал:
float mycos(const float x) {
float _sin = mysin(x);
return sqrt(1-_sin*_sin);
}
Только здесь:
- не учитывается изменение знака косинуса, но для его учёта придётся if'ов понапихать и не факт, что тогда прямое вычисление будет медленее;
- повторно вычисляется уже вычисленное значение синуса, вместо подстановки уже вычисленного ранее - проще уж тогда сразу напрямую косинус посчитать, а не через тригонометрическую формулу;
- формула для синуса через используемое разложение (x - x3/6 + x3*x*x/120 - x3*x3*x/5040) всё равно неверна для используемых значений x: подставь x=4 и узри, что значение синуса внезапно больше 1 по модулю и при дальнейшем увеличении x продолжает очень быстро расти.