• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:虚数の計算)

虚数の計算方法とクラスのオーバーロード

このQ&Aのポイント
  • 虚数の計算方法とは、i^2 = -1、i^3 = -i...などの性質をもつ数の計算方法です。
  • 学校の課題で虚数の計算をする必要がありますが、どのように計算すればよいかわかりません。
  • また、問題で要求されているクラスのオーバーロードの方法についても解説してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

Cですか? C++ですか? C++ならクラスを定義して、+や/に虚数演算を定義できますが、Cでは虚数と虚数、虚数と実数の演算をするそれぞれの関数を作らなければなりません。 虚数という型はありません。 虚数はR^2のベクトルですから、 typedef struct _COMP{ double x, y; } COMP; などとして、ベクトルのように扱いましょう。 あとはそのデータ型に対する関数を定義するのです。 /*z1 := z1 + z2 = (x1 + x2, y1 + y2)*/ void compadd(COMP *z1, COMP *z2){ z1->x += z2->x; z1->y += z2->y; } /*z1 := z1 * z2 = (x1 * x2 - y1 * y2, x1 * y2 + x2 * y1)*/ void compsqr(COMP *z1, COMP *z2){ double s = z1->x, t = z1->y; z1->x = s * z2->x - t * z2->y; z1->y = s * z2->y + t * z2->x; } /*あと引き算とか割り算とか*/ 虚数はi^2 = -1という定義のしかたもありますが、ベクトル演算として z1 + z2 = (x1 + x2, y1 + y2) z1 * z2 = (x1 * x2 - y1 * y2, x1 * y2 + x2 * y1) などというものを定義する方法もあるのです。

lilno
質問者

お礼

返事が遅くなってすいません。haporunさんのHintで何とかできそうです。ありがとうございます。はじめ課題が出たとき「なんだめちゃかんたんじゃん!」とか思ってしまったのですが、いざやり始めたら結構難しかったです、、。

その他の回答 (1)

  • yurarinco
  • ベストアンサー率34% (20/58)
回答No.1

虚数の計算ではなくて複素数の計算ではないでしょうか? real part と imaginary part をメンバ変数として持つ complex というクラスを作り、<<, >>, +, -, *, ==, != といった演算子をオーバーロードして、いろいろな計算が できるようなclassを作りましょう、という課題では ないでしょうか。 たとえば i は実数部が 0 で虚数部が 1 で、これを 仮に {0, 1} と表したとき、{0, 1}ともう一つの{0, 1} 掛け算したとき、実数部が -1 で虚数部が 0 の{-1, 0} という結果になるような計算を実装してみましょう、 ということだと思います。

関連するQ&A