プログラム初心者です。
C++で複素数の四則演算を行うときに
#include<complex>
とすれば、実数と同じように計算できるということを聞きました。
しかし、除算のときにうまく計算できません。
どうやったら解決できるでしょうか?
<開発環境>
VC++(R)6.0Enterprise Edition
「うまく計算できない」とは,
・どのような結果を期待して
・どのようなコードを書いて
・どのような入力を入れて
・どのような結果が返ってきた
のでしょうか。
行列の数値計算をするときに、複素数の正確な計算結果を必要としています。
サンプルとして書いたプログラムが次のとおりです。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<malloc.h>
#include<iostream>
#include<complex>
using namespace std;
int main()
{
complex<double> *z1,*z2,*z3;
int i,j;
int N=3;
int M=3;
z1 = (complex<double> *)calloc(N*N,sizeof(complex<double>));
z2 = (complex<double> *)calloc(N*N,sizeof(complex<double>));
z3 = (complex<double> *)calloc(N*N,sizeof(complex<double>));
for(i=0;i<N;i++){
z1[i*N+i] = complex<double>(1.0,1.0);
}
for(i=0;i<N;i++){
z2[i*N+i] = complex<double>(1.0,1.0);
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
z[i*N+j] = z1[i*N+j] * z2[i*N+j];
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++)
cout << " " << z[i*M+j] ;
cout << endl;
}
free(z1);
free(z2);
free(z3);
return 0;
}
<実行結果>
(1,0) (-1.#IND,-1.#IND) (-1.#IND,-1.#IND)
(-1.#IND,-1.#IND) (1,0) (-1.#IND,-1.#IND)
(-1.#IND,-1.#IND) (-1.#IND,-1.#IND) (1,0)
Press any key to continue
YuOさん友人に聞いて解決しました。
0で割っているので計算できなかったのですね。
分かりにくい質問してすみませんでした。
全然良くないですね……。
callocとかfreeとかをstd::complex<double>に適用している時点でダメです。
C++の勉強をちゃんとしましょう。
matrixをべったりarrayにしちゃってるものかなりペケです。
が、valarray< complex<double> > を意識してワザとやってんならスゴいです。
# どっちみちペケですが
ツイート | ![]() |