Annotation of OpenXM/src/k097/debug/complex0.kk, Revision 1.1
1.1 ! maekawa 1: /* complex0.kk , 1997, 4/17 */
! 2: /* complex の第0版 */
! 3:
! 4: class Complex extends Object {
! 5: local re, /* 実部 */
! 6: im; /* 虚部 */
! 7: def new2(a,b) {
! 8: this = new(super.new0());
! 9: re = a;
! 10: im = b;
! 11: return(this);
! 12: }
! 13: def real() { return(re); }
! 14: def imaginary() { return(im); }
! 15: def operator add(b) {
! 16: return( new2(re+b.real(), im+b.imaginary()) );
! 17: /* return( new0(re+b.real(), im+b.imaginary()) );
! 18: このようなエラーをしても, エラーがおきない. これは問題. */
! 19: /* 片方が, プリミティブオブジェクトでも大丈夫なように書き換える.
! 20: 実は operator override の方法は数学の記述にはいまひとつなのでは?
! 21: Mathematica は, 引数のデータ型を記述できるようになっている.
! 22: でも, ! IsObject() で分類していけばいい.
! 23: 引数を二つみて, つまり this, b の順に context を決めていくのは,
! 24: 私の idea.
! 25: */
! 26: }
! 27: def operator sub(b) {
! 28: return( new2(re-b.real(), im-b.imaginary()) );
! 29: }
! 30: def operator mul(b) {
! 31: return(new2( re*b.real()-im*b.imaginary(), re*b.imaginary()+im*b.real()));
! 32: }
! 33: def operator div(b) {
! 34: local den,num1,num2;
! 35: den = (b.real())^2 + (b.imaginary())^2 ;
! 36: num1 = re*b.real() + im*b.imaginary();
! 37: num2 = -re*b.imaginary()+im*b.real();
! 38: return(new2(num1/den, num2/den));
! 39: /* den == 0 なら, isInvalidRational() がエラーをだすはず.
! 40: このような, こと知らないと, プログラムを書けないのは良くない?
! 41: */
! 42: }
! 43:
! 44: def void show() {
! 45: Print(re); Print(" +I["); Print(im); Print("]");
! 46: }
! 47: def void showln() {
! 48: this.show(); Ln();
! 49: }
! 50: }
! 51:
! 52:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>