История изменений
Исправление
FilosofeM,
(текущая версия)
:
Перегрузку операторов не завезли? Закапывайте!
В Котлине давным давно завезли. Я лично реализовал векторную арифметику на Котлине.
internal operator fun Array<BigDecimal>.plus(other: Array<BigDecimal>) = this.arithmetic(other) { x, y ->
x + y
}
internal operator fun Array<BigDecimal>.minus(other: Array<BigDecimal>) = this.arithmetic(other) { x, y ->
x - y
}
private fun Array<BigDecimal>.arithmetic(other: Array<BigDecimal>, operator: (BigDecimal, BigDecimal) -> BigDecimal): Array<BigDecimal> {
return if (this.isNotEmpty() && other.isNotEmpty()) {
val thisSize = this.size
val otherSize = other.size
val maxSize = maxOf(thisSize, otherSize)
val result = Array<BigDecimal>(maxSize) {
BigDecimal.ZERO
}
for (i in 0 until maxSize) {
result[i] = operator(this[i % thisSize], other[i % otherSize])
}
result
} else {
emptyArray()
}
}
object Main {
@JvmStatic
fun main(args: Array<String>) {
val a = arrayOf(BigDecimal("0.5"), BigDecimal("0.6"), BigDecimal("0.7"))
val b = arrayOf(BigDecimal("0.8"), BigDecimal("0.9"), BigDecimal("1.0"))
println(Arrays.toString(a + b))
}
}
Исходная версия
FilosofeM,
:
Перегрузку операторов не завезли? Закапывайте!
В Котлине давным давно завезли. Я лично реализовал векторную арифметику на Котлине.
internal operator fun Array<BigDecimal>.plus(other: Array<BigDecimal>) = this.arithmetic(other) { x, y ->
x + y
}
internal operator fun Array<BigDecimal>.minus(other: Array<BigDecimal>) = this.arithmetic(other) { x, y ->
x - y
}
private fun Array<BigDecimal>.arithmetic(other: Array<BigDecimal>, operator: (BigDecimal, BigDecimal) -> BigDecimal): Array<BigDecimal> {
return if (this.isNotEmpty() && other.isNotEmpty()) {
val thisSize = this.size
val otherSize = other.size
val maxSize = maxOf(thisSize, otherSize)
val result = Array<BigDecimal>(maxSize) {
BigDecimal.ZERO
}
for (i in 0 until maxSize) {
result[i] = operator(this[i % thisSize], other[i % otherSize])
}
result
} else {
emptyArray()
}
}