Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8046167

JEP 177: Optimize java.text.DecimalFormat.format

    Details

    • Type: JEP
    • Status: Closed
    • Priority: P4
    • Resolution: Delivered
    • Fix Version/s: 8
    • Component/s: core-libs
    • Labels:
      None
    • Author:
      Joseph D. Darcy
    • JEP Type:
      Feature
    • Exposure:
      Open
    • Scope:
      JDK
    • Discussion:
      core dash libs dash dev at openjdk dot java dot net
    • Effort:
      M
    • Duration:
      L
    • JEP Number:
      177

      Description

      Summary

      Optimize java.text.DecimalFormat.format by taking advantage of numerical properties of integer and floating-point arithmetic to accelerate cases with two or three digits after the decimal point.

      Goals

      Make common usages of DecimalFormat faster.

      Success Metrics

      At least a 2X speedup on micro-benchmarks of interest.

      Description

      The decimal format conversions of most interest are for those with two and three digits after the decimal point. Rather than perform expensive floating-point divisions to isolate and round the fractional digits, a floating-point multiply of the fractional portion by 100.0 or 1000.0 can be performed, the product converted to an integer value, and then the resulting integer converted to decimal. While this process is faster, care must be taken to avoid double-rounding and other numerical hazards.

      Case analysis using properties of which fractional decimal values can be exactly represented in binary reduces rounding post-multiply to a look up table style computation.

      Testing

      Besides running existing JCK and regression tests, new tests targeting the boundary cases of the optimized code path will be developed. In addition, the performance of the code will be assessed using micro-benchmarks on contemporary hardware platforms.

      Risks and Assumptions

      Exploratory work with the optimized implementation revealing a long-standing numerical bug in DecimalFormat: some near half-way cases did not round correctly. The specification of DecimalFormat is being amended in Java SE 8 to clearly require correct rounding all the time.

      Impact

      • Compatibility: On JDK 7, (correct) but altered numerical behavior will only be enabled under an aggressive optimization flag to limit behavioral compatibility impact in that release train. In Java SE 8, the correct numerical behavior will always be required by the specification.

      • Performance/scalability: Many common cases will go faster with the new algorithm; other cases will fall back to using the older code.

      • TCK: Some new test cases in JCK 8 would be helpful.

        Issue Links

          Activity

          There are no comments yet on this issue.

            People

            • Assignee:
              darcy Joe Darcy
              Reporter:
              darcy Joe Darcy
              Owner:
              Joe Darcy
              Reviewed By:
              Alan Bateman, Olivier Lagneau
              Endorsed By:
              Mark Reinhold
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: