Changelog

v5.0.x

Release:v5.0.0
Date:20 September 2016
  • Change summary
    • The default value for RPE_DEFAULT_SBITS has changed to 52, previously it was 23. This change means that by default all rpe_var types behave like double precision real types.
    • The upper limit for the value of an IEEE half-precision number has been corrected to 65504. This value was previously too small (32768) resulting in an over-conservative representation of IEEE half-precision values. This change only affects code running with the RPE_IEEE_HALF option turned on.
    • The huge intrinsic has been reimplemented for rpe_var types. It now returns the largest value with an 11-bit exponent and the number of significand bits in its input. It also behaves correctly when using a 10-bit significand and RPE_IEEE_HALF = .true., returning the largest number with a 5-bit exponent and 10-bit significand (65504).
  • Incompatibilities
    • The rounding mode has changed to be compliant with IEEE 754. The new mode will likely give different (but more realistic) results. The new behaviour is the same as that obtained in v4.1 with the option RPE_IEEE_ROUNDING = .true..
    • The option RPE_IEEE_ROUNDING has been removed, the new rounding behaviour is equivalent to RPE_IEEE_ROUNDING = .true.. There is no option to change to the behaviour of RPE_IEEE_ROUNDING = .false..

v4.1.x

Release:v4.1.1
Date:24 August 2016

Add deprecation notices to API documentation. There are no changes to the source code and no need to upgrade from v4.1.0.

Release:v4.1.0
Date:22 August 2016

Adds an IEEE 754 compliant rounding scheme and new functionality for explicit handling of literal floating-point values.

  • Features
    • A new (currently opt-in) IEEE 754 compliant rounding mode, activated by setting the module variable RPE_IEEE_ROUNDING = .true.. This option is provided to help manage a transition to IEEE 754 compliant rounding in a future release. Eventually this option will be removed and IEEE 754 compliant rounding will become the default and only rounding mode.
    • A new helper function rpe_literal is provided to help write correct reduced-precision code that contains numeric literals.
  • Deprecations
    • The current rounding mode (round to nearest) is deprecated. Future releases will use the IEEE 754 compliant rounding mode. Users should set RPE_IEEE_ROUNDING = .true. to get the new rounding behaviour. We recommend the IEEE 754 rounding mode to ensure best results.

v4.0.x

Release:v4.0.0
Date:5 January 2016

This release is a major overhaul of the code with the aim of making it more portable and reliable.

  • Features
    • Compatible with Intel Fortran compilers. The code may work with other compilers too, but only Intel and GNU are tested currently.
  • Incompatibilities: This release is not compatible with version 3 or below.
    • Removed the rpe_shadow derived type.
    • Removed abstract base class rpe_type, the only user type is now rpe_var.
    • Removed getter and setter methods, the value of an rpe_var instance is now accessed directly using the %val attribute.

v3.1.x

Release:v3.1.1
Date:3 November 2015
  • License code under the Apache 2.0 license.
Release:v3.1.0
Date:16 October 2015
  • Support for IEEE half-precision emulation via the RPE_IEEE_HALF module variable.

v3.0.x

Release:v3.0.1
Date:4 November 2015
  • License code under the Apache 2.0 license.
Release:v3.0.1
Date:21 August 2015
  • Features
    • Support for different precision levels in different variables:
      • You can set the %sbits attribute of any rpe_type instance to define the number of significand bits used by that variable.
    • A set of unit tests is included to help us ensure the emulator core is robust.
    • HTML documentation is included with the source (requires Sphinx to build).
  • Incompatibilities
    • This version is incompatible with the v2.0.x series.
    • The public API is now smaller, including only the required parts of the library.
    • Module variables renamed: RPE_BITS -> RPE_DEFAULT_SBITS
    • Reduction of precision subroutine renamed: reduce_precision -> apply_truncation
    • Internal differences to support mixed precision may cause different results to previous versions.

v2.0.x

Release:2.0.1
Date:3 November 2015
  • License code under the Apache 2.0 license.
Release:2.0.0
Date:29 July 2015
  • Features
    • Reduce precision on assignment:
      • The precision of the value held within an rpe_type instance is reduced whenever a value is assigned, meaning an rpe_var instance cannot ever store a full precision value, and an rpe_shadow type will always store a reduced precision value when it has been assigned to directly (but one can of course assign a full precision value to the variable it is shadowing and have that value retained).
      • Explicit calls to reduce_precision are no longer required in any overloaded operators or intrinsic routines, as the reduction of precision will be performed implicitly on assignment of the result.
  • Incompatibilities
    • The change from explicit reduction of precision within overloaded operators and intrinsics will likely cause the emulator to return different results than the v1.0.x series.

v1.0.x

Release:v1.0.1
Date:4 November 2015
  • License code under the Apache 2.0 license.
Release:1.0.0
Date:28 July 2015
  • Features
    • Initial version used operationally for experiments.