Click here to Skip to main content
11,709,536 members (52,958 online)
Rate this: bad
Please Sign up or sign in to vote.
See more: C Beginner maths
I have written a program related to Graph theory in 'C'. And I have used lot of arrays(2

dimensional) in that program. All arrays are of containing floats.(Meant that all my operations

are done b/w floats) Now I have to modify the program to see that it should also work for complex

numbers.For that I want to split each and every array into two arrays one is real and another is


Is there any simple way to take complex numbers as inputs and to do operations b/w them ?

In which way it will be simple ??

In which language it will be simple ??

I knew python,C languages.......

Thnx in advance.....
Posted 17-Oct-12 5:17am
N Shiva526
Edited 17-Oct-12 5:31am
Kenneth Haugland at 17-Oct-12 11:20am
In .NET we have Complex class in System.Numerics....
and I have used the class here:
N Shiva at 17-Oct-12 11:30am
Is there any other way in 'C', except what I mentioned above.
lewax00 at 17-Oct-12 11:33am
Make a struct with real and imaginary fields instead of doing multiple arrays, it will probably be easier.
lewax00 at 17-Oct-12 11:32am
Python supports complex numbers as a basic type, if you aren't stuck with C (wasn't sure from your post):
N Shiva at 18-Oct-12 8:27am
YvesDaoust at 18-May-13 13:19pm
It will be simple in any language (that supports floating-point arithmetic and 2D arrays), as you essentially need to encode the formulas for the 4 basic operations on complex numbers where you did it for floats.
Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Your approach of splitting every array into a real and imaginary part is absolutely legitimate. As an alternative you can create you own structure for a complex number, for example:

typedef struct {
    float r;
    float i;
COMPLEX myArray [10][20];
/* addressing elements, example */
float real5_7 = myArray[5][7].r;
float imag5_7 = myArray[5][7].i;

Things get a bit easier in C++, in which you can define a full-blown Complex data type, including all the standard operators.

And as Kenneth has pointed out already, C# offers a built-in data type Complex, just for free.
N Shiva at 17-Oct-12 11:55am
Assume if i have defined a structure named complex, which has two fields i mean 2 floats one is imaginary and another is real.... How addition & multiplication of these no.s will be simple ?
nv3 at 17-Oct-12 12:05pm
Unfortunately, in C you have to code addition and multiplication of complex numbers yourself. Typically you would create some helper functions that take as input two COMPLEX arguments and deliver the result. These will be just a couple of trivial lines.
N Shiva at 17-Oct-12 12:11pm
ok..thnx.. I will create a structure and i will write functions to add complex no.s (2 real numbers and 2 imaginary no.s) But how to get product ?
nv3 at 17-Oct-12 15:11pm
Just as simple as addition. In case you have forgotten how to multiply two complex numbers, let me refresh your memory. If (r1,i1) and (r2,i2) are the two complex numbers, their product is (r1*r2 - i1*i2, r1*i2 + r2*i1). Perhaps you should take a quick refresher at :-)
N Shiva at 18-Oct-12 10:50am
I meant, I knew how to get product mathematically, If i wrote a function, How to return two no.s (imaginary & real) at a time ?
nv3 at 18-Oct-12 11:21am
res.r = ...
res.i = ...
return res;
Rate this: bad
Please Sign up or sign in to vote.

Solution 2

In C + + is a class dedicated to work with complex numbers, which is part of its standard library, defined in the library complex. Using this will make you work easier because the class provides a set of functions to perform arithmetic operations on this set of numbers, in addition to the I/O. For example:

template< class T> complex<T> operator+(const complex<T>&,const complex<T>&);
template< class T> complex<T> operator+(const complex<T>&,const T&;
template< class T> complex<T> operator+(const T&,const complex<T>&);
//similarly: -,*,/,==,and,!=
template< class T> complex<T> operator+(const complex<T>&);
template< class T> complex<T> operator-(const complex<T>&);
template< class T> T real(const complex<T>&);
template< class T> T imag(const complex<T>&);
template< class T> complex<T> conj(const complex<T>&);
template< class T> complex<T> sin(const complex<T>&);
//similarly:sinh,sqrt,tan,tanh,con,cosh,exp,log,and log10
template< class T> complex<T> pow(const complex<T>&,int);
template< class T> complex<T> pow(const complex<T>&,const T&);
template< class T> complex<T> pow(const complex<T>&,const complex<T>&);

If you don´t know how to work with templates, I recommend you the following book:
97 Addison Wesley - The C + + Programming Language - Stroustrup (Third Edition)
Rate this: bad
Please Sign up or sign in to vote.

Solution 3

#include <stdio.h>      /* Standard Library of Input and Output */
#include <complex.h>    /* Standart Library of Complex Numbers */

int main() {
    double complex z1 = 1.0 + 3.0 * I;
    double complex z2 = 1.0 - 4.0 * I;
    printf("Working with complex numbers:\n\v");
    printf("Starting values: Z1 = %.2f + %.2fi\tZ2 = %.2f %+.2fi\n", creal(z1), cimag(z1), creal(z2), cimag(z2));
    double complex sum = z1 + z2;
    printf("The sum: Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));
    double complex difference = z1 - z2;
    printf("The difference: Z1 - Z2 = %.2f %+.2fi\n", creal(difference), cimag(difference));
    double complex product = z1 * z2;
    printf("The product: Z1 x Z2 = %.2f %+.2fi\n", creal(product), cimag(product));
    double complex quotient = z1 / z2;
    printf("The quotient: Z1 / Z2 = %.2f %+.2fi\n", creal(quotient), cimag(quotient));
    double complex conjugate = conj(z1);
    printf("The conjugate of Z1 = %.2f %+.2fi\n", creal(conjugate), cimag(conjugate));
    return 0;

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 525
1 OriginalGriff 250
2 Peter Leow 219
3 Maciej Los 185
4 Mika Wendelius 160
0 OriginalGriff 9,428
1 Sergey Alexandrovich Kryukov 9,037
2 CPallini 5,189
3 Maciej Los 4,991
4 Mika Wendelius 3,856

Advertise | Privacy | Mobile
Web04 | 2.8.150819.1 | Last Updated 18 Oct 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100