kyonifer / koma

A scientific computing library for Kotlin. https://kyonifer.github.io/koma
Other
270 stars 23 forks source link

Weird bug with augmented assignment and Int constant value #103

Open tobia opened 4 years ago

tobia commented 4 years ago

I spent hours tracking down this bug, because the code compiled and looked fine to me:

val m1 = mat[0.5]
m1[0] -= 1
println(m1[0]) // 0.0 WRONG!

When I replaced the 1 with 1.0 (out of lack of things to try) the bug went away:

val m2 = mat[0.5]
m2[0] -= 1.0
println(m2[0]) // -0.5 correct

What's weird is that Kotlin has no issue with auto-casting a constant to double:

val m3 = mat[0.5]
println(m3[0] - 1) // -0.5 correct

So the bug only appears when using augmented assignments (+=, -=, etc.)

I have no idea how to debug this.

I'm using Koma EJML 0.12, Kotlin 1.3.61, Java 1.8.0_242

kyonifer commented 4 years ago

Thanks for the report.

This project is only lightly maintained at the moment, but we'll try to take a look when possible.

tobia commented 4 years ago

Sure. I just wanted to open an issue in case others run into it. In fact, augmented assignments are converted to regular assignments by the Kotlin compiler, so I don't exclude the possibility that this is a Kotlin compiler bug.

In any case, it may be lightly maintained as of now, but it's still the best math library for Kotlin bar none.