Anonymous user
Arithmetic/Complex: Difference between revisions
→{{header|Scala}}: Simplified files
(Added Scala) |
(→{{header|Scala}}: Simplified files) |
||
Line 1,285:
Scala doesn't come with a Complex library, but one can be made:
<lang 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)▼
package object ArithmeticComplex {
Line 1,319 ⟶ 1,292:
implicit def fromDouble(d: Double) = Complex(d)
implicit def fromInt(i: Int) = Complex(i.toDouble)
▲}
▲ case class Complex(real: Double = 0.0, imag: Double = 0.0) {
▲ 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)
▲ }
}</lang>
|