Add more corner cases for complex power
This commit is contained in:
parent
83d9e1f0af
commit
ca9df8a167
@ -139,12 +139,19 @@ public object ComplexField :
|
|||||||
zero
|
zero
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
exp(pow * ln(arg))
|
exp(pow * ln(arg))
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun power(arg: Complex, pow: Complex): Complex = exp(pow * ln(arg))
|
public fun power(arg: Complex, pow: Complex): Complex = if(arg == zero || arg == (-0.0).toComplex()){
|
||||||
|
if(pow == zero){
|
||||||
|
one
|
||||||
|
} else {
|
||||||
|
zero
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
exp(pow * ln(arg))
|
||||||
|
}
|
||||||
|
|
||||||
public fun Complex.pow(power: Complex): Complex = power(this, power)
|
public fun Complex.pow(power: Complex): Complex = power(this, power)
|
||||||
|
|
||||||
|
@ -71,6 +71,11 @@ internal class ComplexFieldTest {
|
|||||||
(i * 8).let { it.im.toInt() to it.re.toInt() },
|
(i * 8).let { it.im.toInt() to it.re.toInt() },
|
||||||
(Complex(2, 2) pow 2).let { it.im.toInt() to it.re.toInt() })
|
(Complex(2, 2) pow 2).let { it.im.toInt() to it.re.toInt() })
|
||||||
|
|
||||||
|
assertEquals(1.0, Complex(0.0).pow(Complex(0.0)).re, 0.01)
|
||||||
|
assertEquals(1.0, Complex(-0.0).pow(Complex(0.0)).re, 0.01)
|
||||||
|
assertEquals(0.0, Complex(0.0).pow(Complex(2.0)).re, 0.01)
|
||||||
|
assertEquals(0.0, Complex(-0.0).pow(Complex(2.0)).re, 0.01)
|
||||||
|
assertEquals(1.0, Complex(-1.0).pow(Complex(2.0)).re, 0.01)
|
||||||
assertEquals(2.0, power(Complex(-4.0, 0.0), 0.5 + 0 * i).im, 0.01)
|
assertEquals(2.0, power(Complex(-4.0, 0.0), 0.5 + 0 * i).im, 0.01)
|
||||||
assertEquals(2.0, power(Complex(-4.0, 0.0), 0.5).im, 0.01)
|
assertEquals(2.0, power(Complex(-4.0, 0.0), 0.5).im, 0.01)
|
||||||
}
|
}
|
||||||
|
@ -19,19 +19,13 @@ import org.ejml.sparse.csc.factory.DecompositionFactory_DSCC
|
|||||||
import org.ejml.sparse.csc.factory.DecompositionFactory_FSCC
|
import org.ejml.sparse.csc.factory.DecompositionFactory_FSCC
|
||||||
import org.ejml.sparse.csc.factory.LinearSolverFactory_DSCC
|
import org.ejml.sparse.csc.factory.LinearSolverFactory_DSCC
|
||||||
import org.ejml.sparse.csc.factory.LinearSolverFactory_FSCC
|
import org.ejml.sparse.csc.factory.LinearSolverFactory_FSCC
|
||||||
|
import space.kscience.kmath.UnstableKMathAPI
|
||||||
import space.kscience.kmath.linear.*
|
import space.kscience.kmath.linear.*
|
||||||
import space.kscience.kmath.linear.Matrix
|
import space.kscience.kmath.linear.Matrix
|
||||||
import space.kscience.kmath.UnstableKMathAPI
|
|
||||||
import space.kscience.kmath.nd.StructureFeature
|
import space.kscience.kmath.nd.StructureFeature
|
||||||
import space.kscience.kmath.structures.Float64
|
|
||||||
import space.kscience.kmath.structures.Float32
|
|
||||||
import space.kscience.kmath.operations.Float64Field
|
|
||||||
import space.kscience.kmath.operations.Float32Field
|
import space.kscience.kmath.operations.Float32Field
|
||||||
import space.kscience.kmath.operations.DoubleField
|
import space.kscience.kmath.operations.Float64Field
|
||||||
import space.kscience.kmath.operations.FloatField
|
|
||||||
import space.kscience.kmath.operations.invoke
|
import space.kscience.kmath.operations.invoke
|
||||||
import space.kscience.kmath.structures.Float64Buffer
|
|
||||||
import space.kscience.kmath.structures.Float32Buffer
|
|
||||||
import space.kscience.kmath.structures.DoubleBuffer
|
import space.kscience.kmath.structures.DoubleBuffer
|
||||||
import space.kscience.kmath.structures.FloatBuffer
|
import space.kscience.kmath.structures.FloatBuffer
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
Loading…
Reference in New Issue
Block a user