Improve big arithmetics algebra in JVM module of kmath-core
This commit is contained in:
parent
3d85c22497
commit
415d11749a
@ -340,7 +340,7 @@ internal class AsmBuilder<T> internal constructor(
|
|||||||
checkcast(type)
|
checkcast(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadNumeric(value: Number) {
|
internal fun loadNumeric(value: Number) {
|
||||||
if (expectationStack.peek() == NUMBER_TYPE) {
|
if (expectationStack.peek() == NUMBER_TYPE) {
|
||||||
loadNumberConstant(value, true)
|
loadNumberConstant(value, true)
|
||||||
expectationStack.pop()
|
expectationStack.pop()
|
||||||
|
@ -7,31 +7,54 @@ import java.math.MathContext
|
|||||||
/**
|
/**
|
||||||
* A field wrapper for Java [BigInteger]
|
* A field wrapper for Java [BigInteger]
|
||||||
*/
|
*/
|
||||||
object JBigIntegerField : Field<BigInteger> {
|
object JBigIntegerRing : Ring<BigInteger>, PowerOperations<BigInteger> {
|
||||||
override val zero: BigInteger = BigInteger.ZERO
|
override val zero: BigInteger
|
||||||
override val one: BigInteger = BigInteger.ONE
|
get() = BigInteger.ZERO
|
||||||
|
|
||||||
|
override val one: BigInteger
|
||||||
|
get() = BigInteger.ONE
|
||||||
|
|
||||||
override fun add(a: BigInteger, b: BigInteger): BigInteger = a.add(b)
|
override fun add(a: BigInteger, b: BigInteger): BigInteger = a.add(b)
|
||||||
|
override fun BigInteger.minus(b: BigInteger): BigInteger = this.subtract(b)
|
||||||
override fun multiply(a: BigInteger, k: Number): BigInteger = a.multiply(k.toInt().toBigInteger())
|
override fun multiply(a: BigInteger, k: Number): BigInteger = a.multiply(k.toInt().toBigInteger())
|
||||||
|
|
||||||
override fun multiply(a: BigInteger, b: BigInteger): BigInteger = a.multiply(b)
|
override fun multiply(a: BigInteger, b: BigInteger): BigInteger = a.multiply(b)
|
||||||
|
override fun power(arg: BigInteger, pow: Number): BigInteger = arg.pow(pow.toInt())
|
||||||
override fun divide(a: BigInteger, b: BigInteger): BigInteger = a.div(b)
|
override fun sqrt(arg: BigInteger): BigInteger = arg.sqrt()
|
||||||
|
override fun BigInteger.unaryMinus(): BigInteger = negate()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Field wrapper for Java [BigDecimal]
|
* A Field wrapper for Java [BigDecimal]
|
||||||
*/
|
*/
|
||||||
class JBigDecimalField(val mathContext: MathContext = MathContext.DECIMAL64) : Field<BigDecimal> {
|
abstract class JBigDecimalFieldBase internal constructor(val mathContext: MathContext = MathContext.DECIMAL64) :
|
||||||
override val zero: BigDecimal = BigDecimal.ZERO
|
Field<BigDecimal>,
|
||||||
override val one: BigDecimal = BigDecimal.ONE
|
PowerOperations<BigDecimal> {
|
||||||
|
override val zero: BigDecimal
|
||||||
|
get() = BigDecimal.ZERO
|
||||||
|
|
||||||
|
override val one: BigDecimal
|
||||||
|
get() = BigDecimal.ONE
|
||||||
|
|
||||||
override fun add(a: BigDecimal, b: BigDecimal): BigDecimal = a.add(b)
|
override fun add(a: BigDecimal, b: BigDecimal): BigDecimal = a.add(b)
|
||||||
|
override fun BigDecimal.minus(b: BigDecimal): BigDecimal {
|
||||||
|
return subtract(b)
|
||||||
|
}
|
||||||
|
|
||||||
override fun multiply(a: BigDecimal, k: Number): BigDecimal =
|
override fun multiply(a: BigDecimal, k: Number): BigDecimal =
|
||||||
a.multiply(k.toDouble().toBigDecimal(mathContext), mathContext)
|
a.multiply(k.toDouble().toBigDecimal(mathContext), mathContext)
|
||||||
|
|
||||||
override fun multiply(a: BigDecimal, b: BigDecimal): BigDecimal = a.multiply(b, mathContext)
|
override fun multiply(a: BigDecimal, b: BigDecimal): BigDecimal = a.multiply(b, mathContext)
|
||||||
override fun divide(a: BigDecimal, b: BigDecimal): BigDecimal = a.divide(b, mathContext)
|
override fun divide(a: BigDecimal, b: BigDecimal): BigDecimal = a.divide(b, mathContext)
|
||||||
}
|
override fun power(arg: BigDecimal, pow: Number): BigDecimal = arg.pow(pow.toInt(), mathContext)
|
||||||
|
override fun sqrt(arg: BigDecimal): BigDecimal = arg.sqrt(mathContext)
|
||||||
|
override fun BigDecimal.unaryMinus(): BigDecimal = negate(mathContext)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class JBigDecimalField(mathContext: MathContext = MathContext.DECIMAL64) : JBigDecimalFieldBase(mathContext) {
|
||||||
|
companion object : JBigDecimalFieldBase()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
JBigDecimalField { one pow 2 }
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user