Форум программистов, компьютерный форум CyberForum.ru

Класс комплексных чисел в показательной форме - C++

Восстановить пароль Регистрация
 
Тапочке
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 6
19.11.2012, 20:38     Класс комплексных чисел в показательной форме #1
Всем доброго времени суток, реализую класс комплексных чисел в показательной форме.
Нужна помощь в проверке математики (особенно abs(), не переборщил ли я с ними?)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//---------------------------------------------------//
//-  Класс комплексого числа в символической форме  -//
//---------------------------------------------------//
//-  double A - длина вектора                       -//
//-  double F - угол поворота                       -//
//---------------------------------------------------//
class COMPLEX
{
public:
    double A;
    double F;
    COMPLEX()
    {
        A = 0.0;
        F = 0.0;
    }
    COMPLEX(double fst,double snd)
    {
        A = fst;
        F = snd;
    }
    COMPLEX &operator=(const COMPLEX orig)
    {
        A = orig.A;
        F = orig.F;
    }
    COMPLEX operator*(const COMPLEX &second)const
    {
        COMPLEX result;
        result.A = abs(A * second.A);
        if(result.A == 0) result.F = 0;
        else result.F = F + second.F;
        return result;
    }
    COMPLEX operator/(const COMPLEX &second)const
    {
        COMPLEX result;
        result.A = abs(A / second.A);
        if(result.A == 0) result.F = 0;
        else result.F = F - second.F;
        return result;
    }
    COMPLEX operator+(const COMPLEX &second)const
    {
        COMPLEX result;
        double a = abs(A), b = abs(second.A);
        result.A = sqrt(a*a + b*b + 2*a*b*cos(F-second.F));
        
        if(result.A == 0) result.F = 0; //если вектор равен нулю, обнуляем угол
        else if (F==0 && second.F==0) result.F = 0; //если %операция% два нулевых угла получаем 0
        else
        {
            double x = a*sin(F)+b*sin(second.F);
            double y = a*cos(F)+b*cos(second.F);
            //округление числа для избавления от погрешности вычислений
            x = (double)((int)(x*10000))/10000;
            y = (double)((int)(y*10000))/10000;
            result.F = ArcTan(y,x);
        }  
        return result;
    }
    COMPLEX operator-(const COMPLEX &second)const
    {
        COMPLEX result;
        double a = abs(A), b = abs(second.A);
        result.A = sqrt(a*a + b*b - 2*a*b*cos(F-second.F));
        
        if(result.A == 0) result.F = 0; //если вектор равен нулю, обнуляем угол
        else if (F==0 && second.F==0) result.F = 0; //если %операция% два нулевых угла получаем 0
        else
        {
            double x = a*sin(F)-b*sin(second.F);
            double y = a*cos(F)-b*cos(second.F);
            //округление числа для избавления от погрешности вычислений
            x = (double)((int)(x*10000))/10000;
            y = (double)((int)(y*10000))/10000;
            result.F = ArcTan(y,x);
        }        
        return result;
    }
};
и функция ArcTan

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double ArcTan(double y, double x)
{
    if (x==0) return M_PI/2;
    else if (y==0) return 0;
    else
    {        
        //определение четверти
        if (x>0 && y>0) return atan(y/x); //1
        else if (x<0 && y>0) return atan(y/x)+M_PI; //2
        else if (x<0 && y<0) return atan(y/x)-M_PI; //3
        else if (x>0 && y<0) return atan(y/x); //4
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2012, 20:38     Класс комплексных чисел в показательной форме
Посмотрите здесь:

Класс комплексных чисел C++
Класс комплексных чисел C++
C++ Создать класс для реализации комплексных чисел в алгебраической форме
C++ Создать класс для реализации комплексных чисел в алгебраической форме. Используя функции с объектом в качестве аргумента
C++ [C++] Создать класс для реализации комплексных чисел в алгебраической форме
C++ Класс комплексных чисел
класс комплексных чисел C++
Создать класс Комплексное число в показательной форме C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тапочке
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 6
20.11.2012, 23:11  [ТС]     Класс комплексных чисел в показательной форме #2
Проблема актуальна
Yandex
Объявления
20.11.2012, 23:11     Класс комплексных чисел в показательной форме
Ответ Создать тему
Опции темы

Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru