#DOCUMENTATION by cg
class: Complex class
comment/format in: #examples
changed: #trapImaginary:
--- a/Complex.st Sat Jul 01 20:15:53 2017 +0200
+++ b/Complex.st Sat Jul 01 20:17:49 2017 +0200
@@ -75,6 +75,21 @@
examples
"
+ -25 sqrt -> error
+ Complex trapImaginary:[ -25 sqrt ] -> 5i (0.0+5.0i)
+ Complex trapImaginary:[ -25 integerSqrt ] -> 5i (0+5i)
+
+ (Complex trapImaginary:[ -5397346292805549782720214077673687804022210808238353958670041357153884304 integerSqrt ])
+ squared
+
+ 1 + 3i
+
+ Number i + 1
+ 1 + Number i
+
+ 1i * 1i
+ Number i * Number i
+
(5 % 7) real
(5 % 7) imaginary
(5 % 7) = 5
@@ -94,6 +109,19 @@
2 + (1 % 2)
2 * (1 % 2)
+ (Number i raisedTo:-3) -> Number i
+ (Number i raisedTo:-2) -> -1
+ (Number i raisedTo:-1) -> Number i negated
+
+ (Number i raisedTo:0) -> 1
+ (Number i raisedTo:1) -> Number i
+ (Number i raisedTo:2) -> -1
+ (Number i raisedTo:3) -> Number i negated
+ (Number i raisedTo:4) -> 1
+ (Number i raisedTo:6) -> -1
+
+ 5i * 5i -> -25
+ 5i squared -> -25
"
! !
@@ -200,39 +228,54 @@
convert the root to a complex root and proceed.
This allows for regular (failing) code to transparently convert to complex."
- |send|
-
- ^ ImaginaryResultError handle: [:ex |
- |selector|
+ ^ ImaginaryResultError
+ handle: [:ex |
+ |msgSend selector rcvr|
- send := ex parameter.
- selector := send selector.
- (selector = #sqrt or: [selector = #sqrtTruncated]) ifTrue: [
- send receiver: send receiver asComplex.
- ex proceedWith: send value
- ] ifFalse: [
- ex reject
- ]
- ] do: aBlock
+ msgSend := ex parameter.
+ selector := msgSend selector.
+ rcvr := msgSend receiver.
+ (selector = #sqrt or: [selector = #sqrtTruncated]) ifTrue: [
+ (rcvr isNumber and:[rcvr isReal]) ifTrue:[
+ ex proceedWith:(rcvr abs perform:selector) i
+ ] ifFalse:[
+ msgSend receiver: rcvr asComplex.
+ ex proceedWith: msgSend value
+ ].
+ ] ifFalse: [
+ (selector = #integerSqrt) ifTrue: [
+ (rcvr isInteger) ifTrue:[
+ ex proceedWith:(rcvr abs integerSqrt) i
+ ] ifFalse:[
+ ex proceedWith:(rcvr abs asComplex sqrt floor) i
+ ].
+ ] ifFalse: [
+ ex reject
+ ]
+ ]
+ ] do:
+ aBlock
"
Complex trapImaginary: [-2 sqrt]
"
"failing code:
- |a|
+ |a|
- a := -2.
- (a sqrt + 5) * 17.
+ a := -2.
+ (a sqrt + 5) * 17.
"
"complex code:
- |a|
+ |a|
- Complex trapImaginary:[
- a := -2.
- (a sqrt + 5) * 2.
- ]
+ Complex trapImaginary:[
+ a := -2.
+ (a sqrt + 5) * 2.
+ ]
"
+
+ "Modified: / 01-07-2017 / 20:17:15 / cg"
! !
!Complex methodsFor:'accessing'!