- ベストアンサー
虚数の計算方法とクラスのオーバーロード
- 虚数の計算方法とは、i^2 = -1、i^3 = -i...などの性質をもつ数の計算方法です。
- 学校の課題で虚数の計算をする必要がありますが、どのように計算すればよいかわかりません。
- また、問題で要求されているクラスのオーバーロードの方法についても解説してください。
- みんなの回答 (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) などというものを定義する方法もあるのです。
その他の回答 (1)
- yurarinco
- ベストアンサー率34% (20/58)
虚数の計算ではなくて複素数の計算ではないでしょうか? real part と imaginary part をメンバ変数として持つ complex というクラスを作り、<<, >>, +, -, *, ==, != といった演算子をオーバーロードして、いろいろな計算が できるようなclassを作りましょう、という課題では ないでしょうか。 たとえば i は実数部が 0 で虚数部が 1 で、これを 仮に {0, 1} と表したとき、{0, 1}ともう一つの{0, 1} 掛け算したとき、実数部が -1 で虚数部が 0 の{-1, 0} という結果になるような計算を実装してみましょう、 ということだと思います。
お礼
返事が遅くなってすいません。haporunさんのHintで何とかできそうです。ありがとうございます。はじめ課題が出たとき「なんだめちゃかんたんじゃん!」とか思ってしまったのですが、いざやり始めたら結構難しかったです、、。