Scala Programming Language
  1. Scala Programming Language
  2. SI-4981

BigDecimal remainder operation fails on math.Pi for large numbers

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: Scala 2.9.1
    • Fix Version/s: None
    • Component/s: Misc Library
    • Labels:
      None

      Description

      Runing the following in Scala 2.9.1 or more recent:

      BigDecimal("23953295732957329573295379352353252353253") % BigDecimal(math.Pi)

      results in:

      java.lang.ArithmeticException: Division impossible
      at java.math.BigDecimal.divideToIntegralValue(BigDecimal.java:1783)
      at java.math.BigDecimal.divideAndRemainder(BigDecimal.java:1916)
      at java.math.BigDecimal.remainder(BigDecimal.java:1850)
      at scala.math.BigDecimal.remainder(BigDecimal.scala:256)
      at scala.math.BigDecimal.$percent(BigDecimal.scala:260)
      at .<init>(<console>:8)
      at .<clinit>(<console>)
      at .<init>(<console>:11)
      at .<clinit>(<console>)
      at $print(<console>)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
      at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
      at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
      at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
      at java.lang.Thread.run(Thread.java:662)

      Whereas in 2.8 you get:

      res0: scala.math.BigDecimal = 0.513676093799207

      This has to do with the addition of the MathContext object. That object was added to limit decimal expansion of, e.g. BigDecimal(1) / BigDecimal(3), but introduces problems for the remainder operation.

        Activity

        Hide
        Erik Osheim added a comment -

        By the way, I have submitted a pull request to fix this issue on Github:

        https://github.com/scala/scala/pull/86

        The pull also includes BigDecimal tests to catch this issue and older BigDecimal bugs.

        Show
        Erik Osheim added a comment - By the way, I have submitted a pull request to fix this issue on Github: https://github.com/scala/scala/pull/86 The pull also includes BigDecimal tests to catch this issue and older BigDecimal bugs.
        Hide
        Commit Message Bot added a comment -

        (extempore in r25756) BigDecimal adjustments.

        More sensible use of MathContext, plus some BigDecimal tests.
        Contributed by Erik Osheim. Closes SI-4981, no review.

        Show
        Commit Message Bot added a comment - (extempore in r25756 ) BigDecimal adjustments. More sensible use of MathContext, plus some BigDecimal tests. Contributed by Erik Osheim. Closes SI-4981 , no review.

          People

          • Assignee:
            Paul Phillips
            Reporter:
            Erik Osheim
          • Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development