Фантом
эх... вот оно как...
BratSinot писал(а): ↑26.12.2011 22:48
Эм... Я может и ошибаюсь, но atan() вроде не многозначная и лежит в [-pi/2; pi/2].
1. Ну извиняюсь тогда... Вы не виноваты, в таком "чудном" решении... Наверное вместо математики ввели Over9000 разной ненужной НЕХ типа работы с МСО...
2. функция atan() однозначная
по определению. К сожалению, эта функция НЕ является обратной к tg(). Тут та-же беда, что с квадратными уравнениями - операция возведения в квадрат вполне однозначна, а обратная к ней - не однозначна. Это конечно решается определением, вот только при операциях с корнями нужно всегда помнить о том, что определение sqrt() является искусственным.
3. насколько я понимаю, если вы возводите в целую степень, то многозначность уничтожается. (кстати, любимый мой случай, когда НЕХ*0), и вы приходите к формулам, которые могли-бы получить и так, ручками, просто перемножая многочлены.
т.е. вместо того, что-бы считать (x+i*y)^2 вы переводите в r^2*exp(i*ph*2), что в общем-то одно и тоже, но считать проще, если возводить в дробную степень. Проблема в том, что вы вычисляете сначала ph = tg(y/x), и у вас тут всё нормально получается, формула однозначная, а потом вычисляете (y/x)^2=atg(ph*2) и вот здесь-то и проявляется неоднозначность - если ph < pi/4, то всё хорошо, а вот если ph > pi/4, то при умножении на 2 получается > pi/2, мы перепрыгиваем через НЕХ в точки pi/2 и попадаем на соседнюю тангенсоиду. А когда считаем atn() она об этом уже забыла, и считает, что мы были на центральной, нулевой тангенсоиде. Всего-то делов, добавить к результату единицу, и получить правильный арктангенс. Фишка в том, что при вычислении тангенса мы выходим из диапазона, а потом нам этот выход необходимо учесть. Точно тоже самое и с вашими синусами/косинусами.
BratSinot писал(а): ↑26.12.2011 22:48
А теперь по теме, есть ли еще какие способы возведения в степень? И может ли формула Муавра дать выигрыш в скорости (скажем, при больших степенях)?
может. По сравнению с перемножением в цикле. Бином Ньютона очевидно быстрее (криво работает с дробями). Вот только не очень понятно, зачем возводить в большие степени комплексные числа?