|
|
Line 1,285: |
Line 1,285: |
|
Scala doesn't come with a Complex library, but one can be made: |
|
Scala doesn't come with a Complex library, but one can be made: |
|
|
|
|
|
<lang scala>// File Complex.scala: |
|
<lang scala>package org.rosettacode |
⚫ |
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) |
|
⚫ |
|
|
⚫ |
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) } |
|
|
} |
|
⚫ |
|
|
⚫ |
|
|
⚫ |
def apply(s: String) = new Complex(s) |
|
|
} |
|
|
|
|
|
// File package.scala: |
|
|
package org.rosettacode |
|
|
|
|
|
|
package object ArithmeticComplex { |
|
package object ArithmeticComplex { |
Line 1,319: |
Line 1,292: |
|
implicit def fromDouble(d: Double) = Complex(d) |
|
implicit def fromDouble(d: Double) = Complex(d) |
|
implicit def fromInt(i: Int) = Complex(i.toDouble) |
|
implicit def fromInt(i: Int) = Complex(i.toDouble) |
|
⚫ |
|
|
|
|
|
⚫ |
package ArithmeticComplex { |
|
⚫ |
case class Complex(real: Double = 0.0, imag: Double = 0.0) { |
|
⚫ |
|
|
⚫ |
this("[\\d.]+(? !i)".r findFirstIn s getOrElse "0" toDouble , |
|
⚫ |
"[\\d.]+(? =i)".r findFirstIn s getOrElse "0" toDouble ) |
|
|
|
|
⚫ |
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) |
|
⚫ |
|
|
⚫ |
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) } |
|
⚫ |
|
|
⚫ |
|
|
⚫ |
|
|
⚫ |
def apply(s: String) = new Complex(s) |
|
⚫ |
|
|
}</lang> |
|
}</lang> |
|
|
|
|