Jump to content

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 File Complexorg.scala: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)
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 {
Line 1,319 ⟶ 1,292:
implicit def fromDouble(d: Double) = Complex(d)
implicit def fromInt(i: Int) = Complex(i.toDouble)
}
 
package org.rosettacode.ArithmeticComplex {
case class Complex(real: Double = 0.0, imag: Double = 0.0) {
def this(s: String) = this(getReal(s), getImag(s))
private def getImage(s: String) = this("[\\d.]+(?=!i)".r findFirstIn s getOrElse "0" toDouble,
private def getReal(s: String) = "[\\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)
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>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.