Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2011, 21:53   #1
alexdadaev
Новичок
Джуниор
 
Регистрация: 20.01.2011
Сообщений: 2
По умолчанию дискретное преобразование фурье

Никакк не могу решить проблему с дискретным преобразованием фурье. Всё бы ничего, только класс у меня - шаблон и поэтому всё время сталкиваюсь с проблемой несовпадения типов. Даже банальную функцию pow не реализовать, так как она возвращает double, а у меня явно то тип не указывается.
В общем подскажите пожалуйста
Код:
template<class type> class complex {

	type re, im;
	
	public:
	complex();
	complex(type _re, type _im);
	~complex();
	
	type get_re() { return this->re; };
	type get_im() { return this->im; };
	type set_re(type re_val) { re = re_val; }
	type set_im(type im_val) { im = im_val; }

	complex operator+(complex& a);
	complex operator-(complex& a);
	complex operator*(complex& a);
	complex operator/(complex& a);
	
	void show();
	complex fft(complex<type> *x,type N);
	
};

	template<class type> void complex<type>::show()
	{ std::cout << re << " + " << im << "i\n"; }
	
	template<class type> complex<type>::complex():
	re(0),im(0)
	{ }
	
	template<class type> complex<type>::complex(type _re, type _im):
	re(_re),im(_im)
	{ }
	
	template<class type> complex<type>::~complex()
	{ }

	template<class type> complex<type> complex<type>::operator+(complex<type> &a)
	{
		type re_, im_;
		re_ = re + a.re;
		im_ = im + a.im;
		return complex(re_,im_);
	}
	
	template<class type> complex<type> complex<type>::operator-(complex<type> &a)
	{
		type re_, im_;
		re = re - a.re;
		im = im - a.im;
		return complex(re_,im_);
	}
	
	template<class type> complex<type> complex<type>::operator/(complex<type> &a)
	{
		type re_,im_;
		re_ = (re * a.re + im * a.im) / (a.re * a.re + im * im);  
	    im_ = (im * a.re - re * a.im) / (a.re * a.re + im * im);  
   
		return complex(re_,im_); 
	}
	
	template<class type> complex<type> complex<type>::operator*(complex<type> &a)
	{
		type re_,im_;
		re = re*a.re;
		im = im*a.im;
		return complex(re_,im_);
	}
alexdadaev вне форума Ответить с цитированием
Старый 20.01.2011, 23:35   #2
like-nix
Форумчанин
 
Регистрация: 09.11.2009
Сообщений: 104
По умолчанию

Не удивительно вы в каждом операторе определяете локальные переменные для оператора класса type re_,im_; и далее передаете их в return complex(re_,im_); а с неинициализированные переменными базового типа нельзя выполнять арефметические операции. уберите в операторах строку type re_,im_; и замените return complex(re_,im_); на return complex(re,im); и оператор умножения комплексных чисел у вас не правильный
like-nix вне форума Ответить с цитированием
Старый 21.01.2011, 13:42   #3
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Вместо type используйте T, это красивее и общепринято. Вопрос не читал, извините.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрое преобразование Фурье. Практика использования (статья) raxp Обсуждение статей 7 26.04.2013 12:45
Преобразование Фурье fina Помощь студентам 0 17.06.2010 14:00
Быстрое преобразование Фурье (комментарии). brendog Общие вопросы C/C++ 2 21.07.2009 01:15
простое преобразование фурье на паскале locky7fm Помощь студентам 2 13.04.2009 21:37