Uploaded image for project: 'Commons Numbers'
  1. Commons Numbers
  2. NUMBERS-193

Add support for extended precision floating-point numbers

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Major
    • Resolution: Implemented
    • None
    • 1.2
    • core
    • Easy

    Description

      Add implementations of extended precision floating point numbers.

      An extended precision floating point number is a series of floating-point numbers that are non-overlapping such that:

      double-double (a, b):
      |a| > |b|
      a == a + b

      Common representations are double-double and quad-double (see for example David Bailey's paper on a quad-double library: QD).

      Many computations in the Commons Numbers and Statistics libraries use extended precision computations where the accumulated error of a double would lead to complete cancellation of all significant bits; or create intermediate overflow of integer values.

      This project would formalise the code underlying these use cases with a generic library applicable for use in the case where the result is expected to be a finite value and using Java's BigDecimal and/or BigInteger negatively impacts performance.

      An example would be the average of long values where the intermediate sum overflows or the conversion to a double loses bits:

      long[] values = {Long.MAX_VALUE, Long.MAX_VALUE}; System.out.println(Arrays.stream(values).average().getAsDouble()); System.out.println(Arrays.stream(values).mapToObj(BigDecimal::valueOf)
          .reduce(BigDecimal.ZERO, BigDecimal::add)
          .divide(BigDecimal.valueOf(values.length)).doubleValue());
      long[] values2 = {Long.MAX_VALUE, Long.MIN_VALUE}; System.out.println(Arrays.stream(values2).asDoubleStream().average().getAsDouble()); System.out.println(Arrays.stream(values2).mapToObj(BigDecimal::valueOf)
          .reduce(BigDecimal.ZERO, BigDecimal::add)
          .divide(BigDecimal.valueOf(values2.length)).doubleValue());
      

      Outputs:

      -1.0
      9.223372036854776E18
      0.0
      -0.5

      Attachments

        Issue Links

          Activity

            People

              aherbert Alex Herbert
              aherbert Alex Herbert
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: