\input texinfo
@setfilename NEWS
@settitle NEWS file
@documentencoding UTF-8

@c This is part of the GNU Octave Interval Package.
@c Copyright 2015 Oliver Heimlich
@c Copyright 2017 Joel Dahne
@c See the file COPYING for copying conditions.

@macro release{version, date}
@heading Version \version\ \date\
@end macro

@center GNU Octave Interval Package
@center Summary of important user-visible changes

@release{3.2.2, 2026-02-16}

@itemize
@item
    The minimum required Octave version has been increased from 4.2.0 to 4.4.0.
@item
    subsref: Access to interval properties using field syntax, e. g., @code{x.inf} and @code{x.sup}, has been fixed for Octave 7 and later (bug #61898).
@item
    linspace and mince: To better match the core function @code{linspace}, non-vector inputs produce an error now.  Handling of row vectors and empty vectors has been improved (bug #52934).
@item
    intervaltotext: Fix missing sign for upper interval boundary @code{+inf}.
@item
    mpfr_matrix_mul_d: Changed a non-deterministic test into a demo (bug #54956).
@item
    Minor changes in the package manual to reflect output format changes in recent versions of Octave.  Also improvement of compatibility with the doctest package (bug #55969).
@item
    Thanks to Rafael Laboissière the bundled Makefile obtains a @code{distclean} target to simplify the life of downstream maintainers (bug #62758).
@end itemize

@release{3.2.1, 2022-01-28}
This bugfix release fixes compatibility issues with new versions of GNU Octave.

@itemize
@item
    The minimum required Octave version has been increased from 3.8.0 to 4.2.0.
@item
    subsref: Access to interval properties using field syntax, e. g., @code{x.inf} and @code{x.sup}, has been fixed for Octave 5.1 and later on Windows (bug #59334).
@item
    disp: Fix runtime errors in Octave 6 and later, when the function parameter is not a named variable (bug #59334).
@item
    numel: Fix runtime warnings in Octave 6 and later, when the function is called with only one parameter.
@item
    Syntax errors caused by increment and decrement operators in Octave 7 and later have been fixed (bug #59334).
@item
    Interval constants for @code{pi} and @code{e} in Octave 7 and later have been fixed.  This also fixes several trigonometric functions, which have produced wrong results in Octave 7.
@item
    Compilation errors during package installation with Octave 8 and later have been fixed (bug #61568).
@end itemize


@release{3.2.0, 2018-07-01}
@itemize
@item
    Fixed a regression where decorated intervals could no longer be used in Octave 4.4 (bug #53331).
@item
    intervaltotext: A change in Octave 4.4 has removed the possibility to increase Octave's output precision beyond 16 decimal digits (bug #53456), which has made it impossible to output intervals with a higher accuracy.  The function @command{intervaltotext} has been reimplemented with several new format options to customize the format and accuracy of the interval literal.  All recommended conversion specifiers from IEEE Std 1788-2015 are now supported, e. g., intervals can be printed in uncertain form.
@item
    printf, fprintf, sprintf: New functions to produce formatted output with interval literals.
@item
    numel: Added support for additional arguments to compute the number of elements after indexing an interval array.  This allows combined indexing expressions of the form @code{x(1:2).inf}.
@item
    Fixed several warnings during package installation.
@end itemize


@release{3.1.0, 2017-12-21}
This minor release introduces two new functions and fixes severe bugs.

@itemize
@item
    mod, rem: Two new interval arithmetic functions to compute the remainder of a floored division or truncated division respectively.

@item
    plot: Fixed a regression with plotting 2D rectangles in the upcoming Octave 4.4.

@item
    The internal function @command{__print_mesa__} for off-screen mesa rendering has been removed, because the upstream mesa project no longer supports off-screen and on-screen rendering in a single executable (Debian bug #877149).  It is recommended to use Octave's @command{print} function instead, which has greatly been improved in Octave 4.2 regarding the output of rectangles and boxes.

@item
    A package installation error on 32-bit systems could be fixed (bug #51857).

@item
    During package installation, FPU control has not be activated on x86-32 platforms.  Thus, the crlibm library could not disable 80-bit floating-point arithmetic and produced wrong results.  This has been detected by the interval package, which fell back on the slower mpfr library instead (Debian bug #874135).  After fixing compiler options, x86-32 platforms can now use crlibm correctly—even without 64-bit SSE registers.

@item
    Source code for interval arithmetic tests from the ITF1788 project have been removed from this package, since the loadable test data @code{itl.mat} can be edited and processed with Octave easily.  If unit test code for other interval arithmetic libraries shall be generated, find the project at @url{https://github.com/oheim/ITF1788}.

@item
    Thanks to Olaf Till, this package obtains a configure script (patch #9518).  It checks for available libraries during package installation and can help to identify missing dependencies.

@end itemize


@release{3.0.0, 2017-08-19}
This major release introduces support for N-dimensional arrays of intervals.  With previous versions, interval objects have been limited to two dimensions.  Only scalar values, vectors, and matrices could be created.  Now, interval objects can be used with three or more dimensions as well.  Binary and ternary operations support broadcasting of singleton dimensions, which can be expanded to produce higher dimensional results.

Most work for this version has been accomplished by Joel Dahne during his Google Summer of Code project.  The project involved thorough maintenance of all interval functions, which led to improvements and bugfixes beyond the original goal.

@itemize
@item
	Support for N-dimensional arrays of intervals.

@item
	Removed interval implementation of @command{meshgrid}, it now falls back on the standard implementation which can output a 3-d grid properly.  This no longer automatically converts all input to intervals.  For example, it is possible to create a grid for interval X values and non-interval Y values.

@item
	dot, prod, sum: Altered how empty input is handled.  They are more consistent with the standard sum and prod functions (return zero/one for 0×0 input along the first dimension).  For the dot function it is slightly different from how the Octave core function handles it at the moment (bug #51333).

@item
	Output of interval matrices may be customized with @command{format compact} to display more data per page.

@item
	nthroot, pownrev: Now supports vectorization of @var{n} (for nthroot) and @var{p} (for pownrev), broadcasting is fully supported.

@item
	Indexing expressions on intervals can now use the @command{end} keyword and the special operator @samp{:} to select all entries.  This affects selection of entries and assignment of entries (bug #49592, bug #50626).

@item
	Adjustments to ITF1788 test suite:
@itemize
@item
	Several further unit tests have been derived from libieeep1788 together with the latest version of the interval testing framework.  That is, tests with NaN values, NaI values, IEEE 1788 exceptions, and tests for the following functions: numsToInterval, textToInterval, intervalPart, newDev, setDec, decorationPart, and reduction operations.
@item
	Unit tests have been reorganized: The source code of test cases has been moved to /src/test/.
@item
	The test suite is no longer compiled as separate Octave test files (*.tst).  Instead, any interval test library files (*.itl) are stored as loadable test data (itl.mat).  The test data is then used by built-in self-tests of the functions.  This simplifies testing of functions and saves storage space after package installation.  For example, @command{test @@infsup/plus} will run any arithmetic tests on the interval plus function.
@end itemize

@item
	Adjustments to the package documentation:
@itemize
@item
	Information about how to create N-dimensional arrays of intervals.
@item
	To improve privacy and page loading times, the package manual no longer uses external references for CSS and web fonts.
@item
	The package URL has been updated (after Octave Forge has switched to HTTPS).
@item
	HTML fonts have been changed and fallback fonts for Windows have been introduced.
@item
	Adjustments to code examples to support the latest versions of the doctest package and symbolic package.
@end itemize
@end itemize

Bugfixes
@itemize
@item Processor support for SSE2 is automatically detected during package installation.  This fixes installation problems on devices without SSE2, for example the usual Android phones and tablets (bug #51758).
@item wid, mig, mag: Fixed wrong return value for NaI (not an interval) values.  The functions failed to return NaN (not a number).
@item diag: With more than one argument the function no longer fails with an error.
@item dot: Fixed error in identification of dimensions when broadcasting:  When the optional dimension argument is missing, the first non-singleton dimension of both arguments is used (before broadcasting applies).
@item infsupdec: Now creates a warning if the @code{[NaI]} literal is combined with decoration, e. g. @samp{[NaI]_ill}.
@item infsupdec: No longer produces warnings for mixed parameters with strings and numerics.
@item verlinineqnn: No longer produces warnings for unverified solutions.
@item pow: Fixed error when called with vector arguments.  The result was only guaranteed to be sharp in the first entry, e. g. @samp{pow ([0 0], infsup (0, 1))} produced the interval [0, 1] for the second entry.
@item pow2rev: Fixed errors when called with non-scalar arguments in two cases, which could produce wrong results.
@item ctc_intersect, ctc_union: Fixed runtime errors when the combined contractor function is called with less than two output arguments.
@item sin: Fixed possible interval representation error, where the upper boundary of the result could become a signed zero (bug #51283).
@item factorial: Improved result decoration for integer input, since the function is continuous (bug #51783).
@end itemize


@release{2.1.0, 2016-12-28}
@itemize
@item
	The speed of some arithmetic operations has been greatly improved.  They have previously been computed by multi-precision arithmetic which simulates binary64 floating-point arithmetic (MPFR library).  Now, a specialized correctly rounded mathematical library (crlibm) computes identical results 30–100 times faster.  There is no accuracy drawback, arithmetic operations will compute tight interval enclosures as before.  The following functions benefit from this: acos, asin, atan, cos, cosh, exp, expm1, log, log10, log1p, log2, sin, sinh, tan.
@end itemize

Bugfixes
@itemize
@item Fixed indexing expression in interval constructor for illegal intervals of the form @code{[-inf, -inf]} or @code{[inf, inf]}
@item polyval: Fixed unnecessary warnings when evaluated on empty intervals
@item Fixed compilation errors on FreeBSD 9.3
@end itemize


@release{2.0.0, 2016-11-20}
This major release contains fundamental changes to the interval constructors.  After a discussion on the P1788 mailing list, it has been revealed that this interval package didn't implement exceptions from the standard for interval arithmetic correctly: Operations from IEEE Std 1788-2015 which trigger an “exception” shall return a value nonetheless.  Conformance has been improved in this new version, but may break compatibility with previous versions.

A second big news is that the interval package comprises functions from VERSOFT, a verification software package by Jiří Rohn, who has generously published his work as free software this year.  Unfortunately, some of VERSOFT's functions are encrypted and could not be included yet.

@itemize
@item
    nai: With additional arguments, matrices of NaI (not an interval) values can be constructed.  Previously, NaI has been restricted to be of scalar value.

@item
    infsup: The bare interval constructor merely triggers a warning instead of an error on illegal input, which creates empty intervals.  If input contains legitimate as well as illegal input, only entries with illegal input will carry empty intervals.

@item
    infsupdec: The decorated interval constructor may create interval matrices which have NaI (not an interval) as entries.  If input contains legitimate as well as illegal input, only entries with illegal input will carry NaI values.

@item
    Warning and error identifiers of the constructors have been revised.

    The warning identifier @code{interval:NaI} has been removed.  Illegal input signals an @code{interval:UndefinedOperation} warning.  If the input is of an illegal data type or of illegal size, the constructors signal an @code{interval:InvalidOperand} warning.

    The warning identifier @code{interval:PossiblyUndefinedOperation} has been renamed to @code{interval:PossiblyUndefined} to better match the wording in the standard document. Also, previous versions failed to trigger this warning in cases where there is a floating point number between boundaries @var{u} < @var{l}, which has been fixed.

@item
    It is no longer valid to call @code{infsup (+inf, -inf)} to create an empty interval and the constructor will signal a warning in these cases.  This change has been made to better conform to the @command{numsToInterval} function from the interval standard.

    You may create empty intervals with either @code{infsup ()} or @code{infsupdec ()} or @code{empty ()}.

@item
    inf, sup: If the input is NaI (not an interval), these functions return NaN (not a number) values instead of an error.

@item
    Output of intervals in hexadecimal form discriminates between subnormal boundaries and normal boundaries.  Subnormal numbers start with “0x0.” whereas normal numbers start with “0x1.”.

    Also, hexadecimal form has been changed to lower case.

@item
    resize: New interval elements are initialized with zero instead of empty intervals to better match the corresponding Octave function.

@item
    Interval constructors may broadcast column and row vectors.

@item
    Performance improvements: factorial on large arguments; plot and plot3 on input that is plotted as a line.

@item
    New interval functions: tril, triu, qr

@item
    New functions which have been ported from Jiří Rohn's VERSOFT: chol, vereigback, vereigvec, verintlinineqs, verinvnonneg, verlinineqnn, verlinprog

@item
    recip, sqr: The functions have been removed, after they have been deprecated in version 1.4.0.

@item
    plot3: Fixed plotting with gnuplot and fixed an issue where the figure did not switch from 2D to 3D after plotting.

@item
    expm1: Fixed documentation, the function computes exp (X) - 1 instead of exp (X - 1).

@item
    norm: Fixed an error where the Hamming norm of empty intervals was non-empty.

@end itemize

@release{1.5.0, 2016-05-31}
@itemize
@item
    norm: Added subordinate matrix norms and the max norm
@item
    strictsubset: New interval comparison function
@item
    Package documentation: Added new example (Cameleon problem), and the growing list of examples has been split into several web pages.
@item
    Package documentation: Updated recommendations to install and load the package.  The autoload feature will be removed in Octave 4.2.0.  (patch #8981, thanks to juanpi)
@item
    Support package installation in Octave 4.1.0+ (bug #47288)
@end itemize

@release{1.4.1, 2016-02-13}
@itemize
@item
    Fixed a compile error for 32-bit systems during package installation (bug #47100)
@end itemize

@release{1.4.0, 2016-02-09}
@itemize
@item mpower: Improved accuracy and speed.  The interval matrix square can now be computed without dependency errors and with tightest accuracy.
@item factorial: New interval arithmetic operation
@item expm, norm: New interval matrix operations
@item The functions recip and sqr have been deprecated and will be removed in a future release.  Please use @code{1 ./ @var{x}} and @code{@var{x} .^ 2} instead.
@end itemize

@noindent Bugfixes
@itemize
@item bitunpack, interval_bitpack: The order of inf/sup/dec parts has been fixed.  The function documentation describes how the functions behave on little-endian and big-endian systems.
@end itemize

@release{1.3.0, 2015-12-22}
@itemize
@item postpad, prepad, subsasgn: Implicit new elements during subscript assignment and padding have been initialized with empty intervals before this release.  This behavior has changed.  Now, the implicit new element are initialized with zero to make a correct interval extension of the corresponding built-in function.
@item fsolve: New function to solve (systems of) equations and compute the inverse of a set under a function
@item ctc_intersect, ctc_union: Utility functions for contractors and the fsolve function
@item det, prod, recip: New interval arithmetic functions
@item diag: New utility function to create diagonal matrices or extract vectors from diagonals of matrices
@item decorationpart: Choose between different return types with a second parameter
@item For several functions it is now possible to broadcast row vectors against column vectors or vectors against matrices.
@item The user manual has been restructured for better accessibility by new users.  A bunch of usage examples demonstrates the package's capabilities.
@end itemize

@noindent Bugfixes
@itemize
@item sum, sumabs, sumsq: Fixed result for matrices of size zero
@item powrev1, powrev2: Fixed indexing for vectors
@end itemize

@release{1.2.0, 2015-10-01}
@itemize
@item
    The output format for intervals has been changed.  The number of decimal places now respects what has been set by the user with the @command{format short} or @command{format long} command, and is much shorter by default.  Also it is possible to use @command{format hex}.  The old format can be accessed with the @command{intervaltotext} function.
@item
    fminsearch: New optimizer function for finding the minimum value of a function over interval constraints using the Skelboe-Moore algorithm
@item
    fzero: Changed function parameters to support optimset options
@item
    power: Improved speed of the general interval power function and monomials with the notation x .^ n
@item
    plot, plot3: Added support for colormaps
@end itemize

@noindent Bugfixes
@itemize
@item mldivide: Fixed algorithm to handle more matrices without error
@item bisect: Fixed an error during bisection of singleton intervals (thanks to Helmut for finding this during OctConf 2015)
@end itemize


@release{1.1.0, 2015-08-03}
@itemize
@item
    meshgrid, mince: New utility functions to help plotting of interval functions
@item
    linspace: New interval arithmetic function
@item
    intersect, max, min, union: Allow evaluation as aggregate functions within an interval matrix along a common dimension
@item
    Improvements to the documentation
    @itemize
    @item
        Added cross-references between package documentation and function reference
    @item
        Extended information about interval arithmetic in general
    @item
        Extended information about implemented IEEE Std 1788-2015 functions and fixed references to the standard document
    @item
        Added information about plotting intervals
    @item
        Simplified package description
    @item
        Graphics with higher resolutions, demo of interval sombrero function plot on first page, and minor style fixes
    @end itemize
@end itemize

@noindent Bugfixes
@itemize
@item plot3: Fixed plotting of interval edges when plotting several intervals at once using matrices
@end itemize

@release{1.0.0, 2015-06-13}
@itemize
@item
    IEEE Std 1788-2015, IEEE standard for interval arithmetic, was approved on June 11.  To mark the occasion, the major version number has been raised.
@item
    All interval constructors have been extended to create interval matrices from a single string.  Commas or spaces may be used as a column separator (consecutive separators are trimmed).  Semicolon and new line characters can be used as a row separator.
@item
    hdist, idist, sdist, smig: New interval numeric functions
@item
    User manual: Relicensed under GPL, added examples from the former Octave SIMP package, and various minor improvements.
@end itemize

@noindent Bugfixes
@itemize
@item mtimes: Fixed matrix-vector multiplication of decorated intervals
@item Fixed a linking error in mkoctfile that could prevent package installation (bug #45280)
@end itemize

@release{0.2.1, 2015-05-30}
@itemize
@item
    plot, plot3: New interval plotting functions.
    Pay attention to the included examples, which can be executed with @code{demo @@infsup/plot} and @code{demo @@infsup/plot3} respectively.
@item
    polyval: New interval arithmetic algorithm
@item
    bisect: New set operation for bisecting algorithms
@item
    sinrev, cosrev, tanrev, atan2rev1, atan2rev2: Now allow non-scalar arguments
@item
    Simplified licensing: Relicensed parts of the software that were not under GPL
@item
    Updated information for citation of the package
@end itemize

@noindent Bugfixes
@itemize
@item Fixed generation of the manual in PDF format
@item subsasgn: Fixed cases where decoration could be lost (bug #42735)
@end itemize

@release{0.2.0, 2015-05-03}
@itemize
@item
    User manual included in the package, see doc/manual.texinfo
@item
    New utility functions: cat, postpad, prepad, reshape, resize
@item
    and, or: Removed deprecated functions
@item
    Improved display output for cell arrays and new function: disp
@item
    Minor performance improvements (all decorated interval functions, horzcat, vertcat)
@end itemize

@noindent Bugfixes
@itemize
@item issquare, isrow, iscolumn: Fixed compatibility issues with GNU Octave 4.0
@item cbrt: Allow negative values as parameter
@item cot: Fixed accuracy for x = 0
@item cos, csc, sec, sin: Fixed correctness in certain cases
@item Prevent multibyte characters in Microsoft Windows console
@end itemize

@release{0.1.5, 2015-04-06}
@itemize
@item
    Implicit decoration of bare intervals triggers a warning now and can be allowed or forbidden by the user.  Implicit decoration of bare interval literals is not affected.
@item
    newdec: New operation for explicit promotion of bare intervals into decorated intervals (without warning).
@item
    Decorated interval literals with illegal decoration are no longer allowed and produce NaIs.
@item
    hull: In contrast to the union function, the interval constructor is no longer considered a set operation and can create intervals with a non-trivial decoration.
@item
    setdiff, setxor: New set operations
@item
    intersect, union: Renamed set operations; the old function names (and, or) are hereby deprecated and are going to be removed in the next release.
@item
    intervaltotext, intervaltoexact: Decimal fractions no longer omit zero before the point, and unnecessary trailing decimal places can be omitted more consistently and in more cases than before (also affects console
    output).  Improved accuracy and performance with support for interval matrices.
@end itemize

@noindent Bugfixes
@itemize
@item
    mtimes, mldivide: Support for broadcasting of scalar parameters
@item
    nextout: Support for decorated intervals
@item
    An error in GNU Octave core, which could lead to lost or wrong interval decorations, no longer affects decorated intervals (bug #42735)
@item
    Some errors in the function documentation have been fixed (thanks to doctest-for-matlab and Colin's texinfo compatibility patches)
@item
    Fixed interval field access on Windows
@end itemize

@release{0.1.4, 2015-03-15}
@itemize
@item
    New interval constructors: hull, midrad
@item
    New interval arithmetic functions: cbrt, cot, coth, csc, csch, dilog, ei,
    erf, erfc, gamma, gammaln, psi, rsqrt, sec, sech
@item
    mtimes: Support for fast, less accurate evaluation using BLAS routines
@item
    mldivide, mrdivide, inv: Improved performance by using faster mtimes
@item
    infsup, infsupdec: Enabled broadcasting of scalar boundaries
@item
    rad: May compute mid and rad simultaneously
@item
    subsref: Access to interval properties using field syntax: x.inf and x.sup
@end itemize

@release{0.1.3, 2015-02-24}
@itemize
@item
    Fixed a compile error that could possibly occur during package installation
@end itemize

@release{0.1.2, 2015-02-22}
@itemize
@item
    New interval arithmetic functions: nthroot, hypot, log1p, expm1
@item
    lu: New operation for LU(P) decomposition of interval matrices
@item
    nai: New decorated interval constant
@item
    mldivide, mrdivide, inv: Greatly improved accuracy and performance of the linear solver
@item
    Improved accuracy of vector sums, dot products, pownrev, and powrev2
@item
    powrev1, powrev2, pownrev, mulrev: Now allow non-scalar arguments
@item
    overlap: Renamed one overlapping state from equal to equals
@item
    mulrevtopair: No longer available, use mulrev with two output parameters for two-output division
@item
    setdec: No longer available, use infsupdec instead
@item
    Small performance improvements
@end itemize

@noindent Bugfixes
@itemize
@item
    Compatibility with GNU Octave 4.0 (bug #43925)
@item
    Build problems during package installation with environment variables
@item
    iscommoninterval: The decorated variant must return true for common intervals without com decoration
@item
    eq: The decorated variant must not consider the decoration value
@item
    Several decorated functions: When evaluated on a subset of the function's domain, the result's decoration must be dac if the function's restriction to that subset is continuous
@item
    Decorated boolean functions: Must return false when evaluated on NaI input
@item
    Interval constructors: A PossibleUndefined warning must be issued if an interval is created from two very close decimal numbers (which can not be separated in the floating-point context) where the lower boundary is greater than the upper boundary when compared with infinite precision
@item
    Interval constructors: NaNs must produce empty intervals
@item
    Decorated interval constructor: Illegal decorations for empty intervals must be adjusted to trv, and illegal decoration com for unbounded intervals must be adjusted to dac.
@item
    cancelminus/cancelplus: The functions returned wrong results if the interval widths could not be compared in double-precision
@item
    cos: Accuracy for x = [0] improved
@item
    pow, powrev1, powrev2: The function must be defined for x = 0 and y > 0
@item
    All reverse operations: Must return a trivial decoration information at best (the only exception is mulrev)
@end itemize

@release{0.1.1, 2015-02-01}
@itemize
@item
    Increased speed of computation for large matrices
@item
    Improved performance for fma and dot
@item
    mpfr_vector_dot_d: Changed syntax for faster computation on intervals
@item
    Decorated versions of mtimes, mldivide, mpower, inv and reduction operations sum, dot, subabs, subsquare
@item
    Renamed function sumsquare to sumsq in accordance with GNU Octave function names
@item
    New function: fzero for finding all roots of an interval arithmetic function
@end itemize

@noindent Bugfixes
@itemize
@item
    nextout: Function returned wrong results
@item
    exacttointerval: Now produces bare intervals instead of decorated intervals in conformance with IEEE P1788
@item
    atanh: Function returned wrong results for ±1
@item
    dot: Function returned wrong results for some inputs
@item
    fma: Function returned wrong results for some inputs
@item
    infsup: Function returned wrong interval boundaries for decimal numbers, function failed on mixed numerical and string boundaries in single cell array parameter
@item
    mulrevtopair: Fixed order of operands in conformance with IEEE P1788 and wrong results when evaluated on intervals that contain zero
@end itemize

@release{0.1.0, 2015-01-21}
@itemize
@item
    Initial release version, which already contains all required operations of the preliminary standard document IEEE P1788.
@end itemize

@bye
