C++で複素数の四則演算を行うには?

解決


サバチャン  2006-10-07 01:47:16  No: 63235

プログラム初心者です。
C++で複素数の四則演算を行うときに
#include<complex>
とすれば、実数と同じように計算できるということを聞きました。
しかし、除算のときにうまく計算できません。
どうやったら解決できるでしょうか?
<開発環境>
VC++(R)6.0Enterprise Edition


YuO  2006-10-07 01:53:06  No: 63236

「うまく計算できない」とは,
・どのような結果を期待して
・どのようなコードを書いて
・どのような入力を入れて
・どのような結果が返ってきた
のでしょうか。


サバチャン  2006-10-07 02:08:59  No: 63237

行列の数値計算をするときに、複素数の正確な計算結果を必要としています。
サンプルとして書いたプログラムが次のとおりです。

#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


サバチャン  2006-10-07 02:27:55  No: 63238

YuOさん友人に聞いて解決しました。
0で割っているので計算できなかったのですね。
分かりにくい質問してすみませんでした。


YuO  2006-10-07 05:18:34  No: 63239

全然良くないですね……。
callocとかfreeとかをstd::complex<double>に適用している時点でダメです。
C++の勉強をちゃんとしましょう。


επιστημη  2006-10-07 07:02:09  No: 63240

matrixをべったりarrayにしちゃってるものかなりペケです。
が、valarray< complex<double> > を意識してワザとやってんならスゴいです。

# どっちみちペケですが


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加