ionspin / kotlin-multiplatform-bignum

A Kotlin multiplatform library for arbitrary precision arithmetics
Apache License 2.0
339 stars 40 forks source link

incorrect values for % operator on negative numbers #285

Open sergeych opened 3 months ago

sergeych commented 3 months ago
assertEquals("${-15.5 % 360.0}", ((-15.5).bd % 360.bd).toStringExpanded())

fails:

Expected :-15.5
Actual   :-0.155

Full test cor convenience:

import com.ionspin.kotlin.bignum.decimal.BigDecimal
import kotlin.test.Test
import kotlin.test.assertEquals

val Double.bd get() = BigDecimal.fromDouble(this)
class BdtoolsTest {
    @Test
    fun testMod2() {
        // OK
        assertEquals("15.5", ((360.bd * 5 + 15.5.bd) % 360.bd).toStringExpanded())
        // NG
        assertEquals("${-15.5 % 360.0}", ((-15.5).bd % 360.bd).toStringExpanded())
    }
}
ionspin commented 3 months ago

Thanks for reporting!