Arithmetic/Complex: Difference between revisions
Content added Content deleted
(→{{header|TI-89 BASIC}}: fix example damaged by stripping TI Uni font) |
(Added Scala) |
||
Line 1,281: | Line 1,281: | ||
c = 1.0 / a |
c = 1.0 / a |
||
c = -a</lang> |
c = -a</lang> |
||
=={{header|Scala}}== |
|||
Scala doesn't come with a Complex library, but one can be made: |
|||
<lang scala>// File Complex.scala: |
|||
package org.rosettacode.ArithmeticComplex |
|||
case class Complex(real: Double = 0.0, imag: Double = 0.0) { |
|||
private def getReal(s: String) = "[\\d.]+(?!i)".r findFirstIn s getOrElse "0" toDouble |
|||
private def getImage(s: String) = "[\\d.]+(?=i)".r findFirstIn s getOrElse "0" toDouble |
|||
def this(s: String) = this(getReal(s), getImag(s)) |
|||
def +(b: Complex) = Complex(real + b.real, imag + b.imag) |
|||
def -(b: Complex) = Complex(real - b.real, imag - b.imag) |
|||
def *(b: Complex) = Complex(real * b.real - imag * b.imag, real * b.imag + imag * b.real) |
|||
def inverse = { |
|||
val denom = real * real + imag * imag |
|||
Complex(real / denom, -imag / denom) |
|||
} |
|||
def /(b: Complex) = this * b.inverse |
|||
def unary_- = Complex(-real, -imag) |
|||
override def toString = real + " + " + imag + "i" |
|||
def i = { require(imag == 0.0); Complex(imag = real) } |
|||
} |
|||
object Complex { |
|||
def apply(s: String) = new Complex(s) |
|||
} |
|||
// File package.scala: |
|||
package org.rosettacode |
|||
package object ArithmeticComplex { |
|||
val i = Complex(0, 1) |
|||
implicit def fromDouble(d: Double) = Complex(d) |
|||
implicit def fromInt(i: Int) = Complex(i.toDouble) |
|||
}</lang> |
|||
Usage example: |
|||
<lang scala>scala> import org.rosettacode.ArithmeticComplex._ |
|||
import org.rosettacode.ArithmeticComplex._ |
|||
scala> 1 + i |
|||
res0: org.rosettacode.ArithmeticComplex.Complex = 1.0 + 1.0i |
|||
scala> 1 + 2 * i |
|||
res1: org.rosettacode.ArithmeticComplex.Complex = 1.0 + 2.0i |
|||
scala> 2 + 1.i |
|||
res2: org.rosettacode.ArithmeticComplex.Complex = 2.0 + 1.0i |
|||
scala> res0 + res1 |
|||
res3: org.rosettacode.ArithmeticComplex.Complex = 2.0 + 3.0i |
|||
scala> res1 * res2 |
|||
res4: org.rosettacode.ArithmeticComplex.Complex = 0.0 + 5.0i |
|||
scala> res2 / res0 |
|||
res5: org.rosettacode.ArithmeticComplex.Complex = 1.5 + -0.5i |
|||
scala> res1.inverse |
|||
res6: org.rosettacode.ArithmeticComplex.Complex = 0.2 + -0.4i |
|||
scala> -res6 |
|||
res7: org.rosettacode.ArithmeticComplex.Complex = -0.2 + 0.4i |
|||
</lang> |
|||
=={{header|Scheme}}== |
=={{header|Scheme}}== |