Complex.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 19 Jan 2012 10:06:02 +0000
branchjv
changeset 17910 8d796ca8bd1d
parent 17892 d86c8bd5ece3
child 17911 a99f15c5efa5
permissions -rw-r--r--
Merged with /trunk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17847
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 This is a Manchester Goodie.  It is distributed freely on condition
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
 that you observe these conditions in respect of the whole Goodie, and on
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
 any significant part of it which is separately transmitted or stored:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	* You must ensure that every copy includes this notice, and that
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	  source and author(s) of the material are acknowledged.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	* These conditions must be imposed on anyone who receives a copy.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	* The material shall not be used for commercial gain without the prior
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	  written consent of the author(s).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
 For more information about the Manchester Goodies Library (from which
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
 this file was distributed) send e-mail:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
	To: goodies-lib@cs.man.ac.uk
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
	Subject: help
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
 This is an additional goody-class, which is NOT covered by the
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
 ST/X license. It has been packaged with the ST/X distribution to
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
 make your live easier instead. NO WARRANTY.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
"{ Package: 'stx:libbasic' }"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
ArithmeticValue subclass:#Complex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
	instanceVariableNames:'real imaginary'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	classVariableNames:'ComplexOne ComplexZero'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	poolDictionaries:''
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	category:'Magnitude-Numbers'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!Complex class methodsFor:'documentation'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
copyright
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
 This is a Manchester Goodie.  It is distributed freely on condition
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
 that you observe these conditions in respect of the whole Goodie, and on
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
 any significant part of it which is separately transmitted or stored:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
	* You must ensure that every copy includes this notice, and that
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
	  source and author(s) of the material are acknowledged.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
	* These conditions must be imposed on anyone who receives a copy.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
	* The material shall not be used for commercial gain without the prior
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
	  written consent of the author(s).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
 For more information about the Manchester Goodies Library (from which
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
 this file was distributed) send e-mail:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
	To: goodies-lib@cs.man.ac.uk
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
	Subject: help
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
 This is an additional goody-class, which is NOT covered by the
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
 ST/X license. It has been packaged with the ST/X distribution to
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
 make your live easier instead. NO WARRANTY.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
documentation
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    This class implements complex numbers.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    A complex number has real and imaginary parts which must be manipulated simultaneously
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    in any numeric processing.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    Complex numbers can be used in many of the same places that regular numbers
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    can be used with one major exception of comparisons, since complex numbers cannot
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    be directly compared for size
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    (except through lengths of vectors (see absolute value)).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    [Instance variables:]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
       real        <Number> the part of the number which can be expressed as a Real number
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
       imaginary   <Number> the part of the number which, in terms of how the number behaves,
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
			    has been multiplied by 'i' (-1 sqrt)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    [Author:]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
	Kurt Hebel (hebel@uinova.cerl.uiuc.edu)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
	minor changes and double dispatching code by cg.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
examples
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    (5 % 7) real
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    (5 % 7) imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    (5 % 7) = 5
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    (5 % 0) = 5
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    (5.0 % 0) = 5
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    (1 % 0) + (2 % 0)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    (1 % 0) + (0 % 2)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    (1 % 0) + (2 % 3)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    (1 % 0) * (2 % 0)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    (1 % 0) * (0 % 2)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    (1 % 0) * (2 % 3)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    (1 % 2) + 2
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    (1 % 2) * 2
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    2 + (1 % 2)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    2 * (1 % 2)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
!Complex class methodsFor:'instance creation'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
abs:aNumber1 arg:aNumber2
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    |real imaginary|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    real := aNumber1 * aNumber2 cos.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    imaginary := aNumber1 * aNumber2 sin.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    ^ real + imaginary i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
fromReal: aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "Create a new complex number from the given real number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    ^ self basicNew setReal: aNumber setImaginary: 0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
imaginary: v
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    "Create a new complex number with 0 as real and given imaginary parts.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
     If the imaginary part is zero, return the real part of the number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
    v = 0 ifTrue: [^ 0].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    ^ self basicNew setReal: 0 setImaginary: v
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
real: aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    "Create a new complex number from the given real number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    ^ self basicNew setReal: aNumber setImaginary: 0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
real: u imaginary: v
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    "Create a new complex number with the given real and imaginary parts.  If the
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
     imaginary part is zero, return the real part of the number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    v = 0 ifTrue: [^ u].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    ^ self basicNew setReal: u setImaginary: v
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
!Complex class methodsFor:'constants access'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
unity
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    "Answer the value which allows, for any given arithmetic value, the following to be true:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
	aNumber * aNumber class unity = aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
     This must be true regardless of how a given subclass chooses to define #*"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    ComplexOne isNil ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
	ComplexOne := self fromReal: 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    ^ ComplexOne
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
zero
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    "Answer the value which allows, for any given arithmetic value, the following to be true:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
	aNumber + aNumber class zero = aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
     This must be true regardless of how a given subclass chooses to define #+"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
    ComplexZero isNil ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
	ComplexZero := self fromReal: 0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    ^ ComplexZero
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
!Complex class methodsFor:'exception handling'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
trapImaginary:aBlock
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    "evaluate aBlock; if any DomainError occurs inside, with respect to square roots,
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
     convert the root to a complex root and proceed.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
     This allows for regular (failing) code to transparently convert to complex."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
    |send|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    ^ ImaginaryResultError handle: [:ex |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
	|selector|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
	send := ex parameter.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
	selector := send selector.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
	(selector = #sqrt or: [selector = #sqrtTruncated]) ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
	    send receiver: send receiver asComplex.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
	    ex proceedWith: send value
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
	] ifFalse: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
	    ex reject
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
	]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    ] do: aBlock
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
     Complex trapImaginary: [-2 sqrt]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
    "failing code:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
	 |a|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
	 a := -2.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
	 (a sqrt + 5) * 17.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    "complex code:
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
	 |a|
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
	 Complex trapImaginary:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
	     a := -2.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
	     (a sqrt + 5) * 2.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
	 ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
!Complex methodsFor:'accessing'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    "Return the imaginary part of the complex number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    ^ imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
imaginaryPart
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    "Return the imaginary part of the complex number.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
     An alias for imaginary (for compatibility with other complex implementations)"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
    ^ imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
real
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    "Return the real part of the complex number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    ^ real
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
realPart
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
    "Return the real part of the complex number.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
     An alias for real (for compatibility with other complex implementations)"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    ^ real
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
!Complex methodsFor:'arithmetic'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
* aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
    "Return the product of the receiver and the argument."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
"/    | u v r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
"/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
"/    aNumber isComplex ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
"/        u := aNumber real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
"/        v := aNumber imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
"/        r := (real * u) - (imaginary * v).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
"/        i  := (real * v) + (imaginary * u).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
"/        i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
"/        ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
"/    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
    ^ aNumber productFromComplex:self.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    "Modified: / 8.7.1998 / 12:12:37 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
+ aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    "Return the sum of the receiver and the argument."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
"/    | r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
"/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
"/    aNumber isComplex ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
"/        r := aNumber real + real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
"/        i := aNumber imaginary + imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
"/        i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
"/        ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
"/    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    ^ aNumber sumFromComplex:self.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    "Modified: / 8.7.1998 / 12:15:42 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
- aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    "Return the difference of the receiver and the argument."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
"/    | r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
"/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
"/    aNumber isComplex ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
"/        r := real - aNumber real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
"/        i := imaginary - aNumber imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
"/        i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
"/        ^ Complex real:r imaginary:i.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
"/    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
    ^ aNumber differenceFromComplex:self.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
    "Modified: / 8.7.1998 / 12:15:38 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
/ aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
    "Return the quotient of the receiver and the argument."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
"/    | denom u v r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
"/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
"/    aNumber isComplex ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
"/        u := aNumber real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
"/        v := aNumber imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
"/        denom := u * u + (v * v).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
"/        r := u * real + (v * imaginary) / denom.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
"/        i := u * imaginary - (v * real) / denom.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
"/        i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
"/        ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
"/    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
    ^ aNumber quotientFromComplex:self.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
    "Modified: / 8.7.1998 / 12:15:34 / cg"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
abs
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
    "Return the magnitude (or absolute value) of the complex number
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
     (thats the distance from the origin in the complex plane)."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
    ^ (real * real + (imaginary * imaginary)) sqrt
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
     (1 % 1) abs
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
conjugated
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
    "Return the complex conjugate of this complex number
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
     (i.e. with imaginary part negated)."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
    ^ Complex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
	real: real
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
	imaginary: imaginary negated
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
modulus
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
    | absReal absImag multiplicand quotient |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
    absReal := real abs.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
    absImag := imaginary abs.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
    absReal >= absImag ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
	multiplicand := absReal.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
	quotient := imaginary / real
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
    ] ifFalse: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
	multiplicand := absImag.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
	quotient := real / imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    ^ multiplicand * ((1 + (quotient * quotient)) sqrt)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
negated
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
    "return a new complex with both real and imaginary parts negated"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
    ^ Complex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
	real: real negated
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
	imaginary: imaginary negated
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
!Complex methodsFor:'coercing'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
coerce: aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
    ^ aNumber asComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
generality
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
    ^ 150
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
!Complex methodsFor:'comparing'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
< aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
    "raises an error - complex numbers are not well ordered"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
    ^ Number
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
	raise: #unorderedSignal
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
	receiver: self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
	selector: #<
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
	arg: aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
	errorString: 'Complex numbers are not well ordered'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
     1 < (2 % 2)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
     (2 % 2) < 1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
= aNumber
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
    "return true, if the argument represents the same numeric value
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
     as the receiver, false otherwise."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
    ^ aNumber equalFromComplex:self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
hash
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
    "Hash is implemented because equals is implemented."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
    ^ (real hash) bitXor:(imaginary hash bitShift:16)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
     (1+0i) hash
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
     (1+1i) hash
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
!Complex methodsFor:'converting'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
asComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
    "I am a complex - so return the receiver"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
    ^ self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
asFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
    imaginary = 0 ifTrue: [^ real asFloat].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
    ^ Number
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
	    raise: #coercionErrorSignal
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
	    receiver: self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
	    selector: #asFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
	    errorString: 'Can''t coerce an instance of Complex to a Float'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
asInteger
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
    imaginary = 0 ifTrue: [^real asInteger].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
    ^ Number
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
	raise: #coercionErrorSignal
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
	receiver: self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
	selector: #asInteger
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
	errorString: 'Can''t coerce an instance of Complex to an Integer'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
asPoint
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
    "Return the complex number as a point."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
    ^ real @ imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
reduceGeneralityIfPossible
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
    "Answer the receiver transformed to a lower generality, if such a
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
     transformation is possible without losing information.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
     If not, answer the receiver"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
    imaginary isZero
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
	ifTrue: [^ real]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
	ifFalse: [^ self]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
!Complex methodsFor:'double dispatching'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
differenceFromComplex:aComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
    "Return the difference of the argument, aComplex and the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
    | r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
    r := aComplex real - real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
    i := aComplex imaginary - imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
    i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
    ^ Complex real:r imaginary:i.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
differenceFromFloat:aFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
    "Return the difference of the argument, aFloat and the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
    "/ ^ aFloat asComplex - self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   450
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
    | r |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
    r := aFloat - real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
    imaginary = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
    ^ Complex real:r imaginary:imaginary negated
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
     (1 % 1) - 1.0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
     1.0 - (1 % 1)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
differenceFromFraction: aFraction
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
    ^ aFraction asComplex - self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
differenceFromInteger: anInteger
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
    ^ anInteger asComplex - self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
equalFromComplex:aComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
    ^ (aComplex real = real) and:[aComplex imaginary = imaginary]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
equalFromFloat:aFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
    imaginary = 0 ifFalse:[^ false].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
    ^ real = aFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
productFromComplex:aComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
    "Return the product of the receiver and the argument, aComplex."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   483
    | u v r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
    u := aComplex real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
    v := aComplex imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
    r := (real * u) - (imaginary * v).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
    i  := (real * v) + (imaginary * u).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
    i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
    ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
productFromFloat: aFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
    "Return the product of the receiver and the argument, aFloat."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
    "/  ^ aFloat asComplex * self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
    | u r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
    u := aFloat.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
    r := (real * aFloat).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
    i  := (imaginary * aFloat).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
    i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
    ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
     (1 % 1) * 2.0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
     (1 % 1) * 0.0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
     2.0 * (1 % 1)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
productFromFraction: aFraction
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
    ^ aFraction asComplex * self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
productFromInteger: anInteger
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
    ^ anInteger asComplex * self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
quotientFromComplex:aComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
    "Return the quotient of the argument, aComplex and the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
    | denom nr ni r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
    nr := aComplex real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
    ni := aComplex imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
    denom := real * real + (imaginary * imaginary).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
    r := real * nr + (imaginary * ni) / denom.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
    i := real * ni - (imaginary * nr) / denom.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
    i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
    ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
"/ is the stuff below better ?
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
"/    "Implement complex division (a + ib) / (c + id).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   536
"/     Due to double dispatch, in this routine
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
"/        self = (c + id) and aComplex = (a + ib)."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
"/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
"/    | quotient denominator |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
"/
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
"/    self realPart abs >= (self imaginaryPart abs)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
"/        ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
"/            quotient := self imaginaryPart / self realPart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
"/            denominator := self realPart + (self imaginaryPart * quotient).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
"/            ^ Complex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   546
"/                real: (aComplex realPart + (aComplex imaginaryPart * quotient)) / denominator
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
"/                imaginary: (aComplex imaginaryPart - (aComplex realPart * quotient)) / denominator ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
"/        ifFalse: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
"/            quotient := self realPart / self imaginaryPart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
"/            denominator := (self realPart * quotient) + self imaginaryPart.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
"/            ^ Complex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
"/                real: ((aComplex realPart * quotient) + aComplex imaginaryPart) / denominator
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
"/                imaginary: ((aComplex imaginaryPart * quotient) - aComplex realPart) / denominator ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   556
quotientFromFloat:aFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
    "Return the quotient of the argument, aFloat and the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
    ^ aFloat asComplex / self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
quotientFromFraction:aFraction
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
    "Return the quotient of the argument, aFraction and the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
    ^ aFraction asComplex / self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   567
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   568
quotientFromInteger:anInteger
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
    "Return the quotient of the argument, anInteger and the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   570
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   571
    ^ anInteger asComplex / self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   572
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   573
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   574
sumFromComplex:aComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   575
    "Return the sum of the receiver and the argument, aComplex."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   576
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   577
    | r i |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   578
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   579
    r := aComplex real + real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   580
    i := aComplex imaginary + imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   581
    i = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
    ^ Complex real:r imaginary:i
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
sumFromFloat: aFloat
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
    "Return the sum of the receiver and the argument, aFloat."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   588
    "/ ^ aFloat asComplex + self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   589
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
    | r |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
    r := aFloat + real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
    imaginary = 0 ifTrue:[ ^ r ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
    ^ Complex real:r imaginary:imaginary
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
     (1 % 1) + 1.0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
     1.0 + (1 % 1)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
sumFromFraction: aFraction
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
    ^ aFraction asComplex + self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
sumFromInteger: anInteger
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
    ^ anInteger asComplex + self
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
!Complex methodsFor:'mathematical functions'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
angle
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
    "Return the radian angle for this Complex number."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
    real < 0 ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
	imaginary < 0 ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
	    ^ (imaginary / real) arcTan - Float pi
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
	].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
	^ Float pi + (imaginary / real) arcTan
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
    ^ (imaginary / real) arcTan
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
     (1 % 1) angle radiansToDegrees
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   627
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   628
exp
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   629
    "Return the complex exponential of the receiver."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   630
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   631
    ^ (imaginary cos % imaginary sin) * real exp
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   633
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
sqrt
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
    "Return the square root of the receiver"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   637
    | w quotient absReal absImag |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
    ((real = 0) and: [ imaginary = 0 ]) ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
	^ Complex zero
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
    absReal := real abs.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
    absImag := imaginary abs.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645
    absReal >= absImag ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
	quotient := imaginary / real.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   647
	w := (absReal sqrt) * (((1 + (1 + (quotient * quotient)) sqrt) / 2) sqrt)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   648
    ] ifFalse: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   649
	quotient := real / imaginary.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
	w := (absImag sqrt) * (((quotient abs + (1 + (quotient * quotient)) sqrt) / 2) sqrt)
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   651
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
    real >= 0 ifTrue:[
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
	^ Complex real: w imaginary: (imaginary / (2 * w))
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
    imaginary >= 0 ifTrue: [
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   657
	^ Complex real: absImag / (2 * w) imaginary: w
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   658
    ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
    ^ Complex real: absImag / (2 * w) imaginary: -1 * w
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   661
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   662
sqrt_bad
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   663
    "Return the square root of the receiver"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   664
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   665
    | u v |
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   666
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   667
    (imaginary = 0 and: [real >= 0]) ifTrue: [^ real sqrt].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   668
    v := (self abs - real / 2) sqrt.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
    u := imaginary / 2 / v.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   670
    ^ Complex real: u imaginary: v
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   673
     -4 asComplex sqrt
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   674
     4 asComplex sqrt
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   675
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   676
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   677
     -4 asComplex sqrt squared
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   678
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   679
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   680
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   681
!Complex methodsFor:'printing'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   682
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   683
displayOn: aStream
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   684
    aStream nextPut: $(.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   685
    self realPart printOn: aStream.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   686
    self imaginaryPart >= 0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   687
	ifTrue: [ aStream nextPut: $+ ]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   688
	ifFalse: [ aStream nextPut: $- ].
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   689
    self imaginaryPart abs printOn: aStream.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   690
    aStream nextPutAll: 'i)'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   693
     Complex real:1 imaginary:1
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   694
    "
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   695
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   697
printOn: aStream
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
    aStream nextPut: $(.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   699
    real storeOn: aStream.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
    aStream nextPutAll: '%'.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   701
    imaginary storeOn: aStream.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   702
    aStream nextPut: $).
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   704
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   705
printString
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   706
    ^ '(' , real printString, '%', imaginary printString, ')'
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   707
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   708
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   709
storeOn: aStream
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   710
    self printOn:aStream
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   711
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   712
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   713
!Complex methodsFor:'private'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   714
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   715
setReal: u setImaginary: v
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   716
    real := u.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   717
    imaginary := v.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   718
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   719
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   720
!Complex methodsFor:'testing'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   721
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   722
isComplex
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   723
    "Answer whether the receiver has an imaginary part
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   724
     (i.e. if it is a complex number). Always true here."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   725
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   726
    ^ true
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   727
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   728
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   729
isReal
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   730
    "Return true if this Complex number has a zero imaginary part."
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   731
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   732
    ^ imaginary = 0
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   733
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   734
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   735
isZero
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   736
    "Answer whether 'self = self class zero'.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   737
     We can't use #= because #= is defined in terms of #isZero"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   738
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   739
    ^real isZero and: [imaginary isZero]
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   740
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   741
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   742
sign
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   743
    "return a new complex, consisting of the signs of the real and imaginary parts.
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   744
     Q: is this a good thing to do ?"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   745
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   746
    ^ Complex real: real sign imaginary: imaginary sign
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   747
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   748
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   749
!Complex methodsFor:'truncation & rounding'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   750
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   751
ceiling
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   752
    "blocked: complex numbers have no ceiling"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   753
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   754
    ^ self shouldNotImplement
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   755
!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   756
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   757
floor
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   758
    "blocked: complex numbers have no floor"
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   759
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   760
    ^ self shouldNotImplement
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   761
! !
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   762
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   763
!Complex class methodsFor:'documentation'!
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   764
62aa54f44969 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   765
version
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   766
    ^ '$Header: /cvs/stx/stx/libbasic/Complex.st,v 1.14 2011/08/04 20:46:43 cg Exp $'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   767
!
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   768
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   769
version_SVN
17910
8d796ca8bd1d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
   770
    ^ '$Id: Complex.st 10758 2012-01-19 10:06:02Z vranyj1 $'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17847
diff changeset
   771
! !
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   772
17910
8d796ca8bd1d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
   773