# HG changeset patch # User Rik # Date 1523568850 25200 # Node ID 69b21b8a0e9fd5c35465da933d8279973711bbd1 # Parent 27e6b38571d3ff66da5452a64be711dc58e0a1a6 nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463). * nextpow2.m: Change docstring to define the output variable N. Check for failure of 2-input form of log2 function by looking for an exponent of 0. If found, copy over the value that log2 was not able to process (e.g., Inf or NaN). Add BIST tests for special cases. Add fail pattern to %!error test. diff -r 27e6b38571d3 -r 69b21b8a0e9f scripts/general/nextpow2.m --- a/scripts/general/nextpow2.m Fri Mar 23 19:03:45 2018 -0400 +++ b/scripts/general/nextpow2.m Thu Apr 12 14:34:10 2018 -0700 @@ -17,7 +17,7 @@ ## . ## -*- texinfo -*- -## @deftypefn {} {} nextpow2 (@var{x}) +## @deftypefn {} {@var{n} =} nextpow2 (@var{x}) ## Compute the exponent for the smallest power of two larger than the input. ## ## For each element in the input array @var{x}, return the first integer @@ -47,7 +47,9 @@ endif [f, n] = log2 (abs (x)); - n(f == 0.5)--; + idx = (n == 0); # Find any failures of log2 function (n == 0) + n(idx) = f(idx); # and copy over value. + n(f == 0.5)--; endfunction @@ -59,6 +61,15 @@ %!assert (nextpow2 (-17), 5) %!assert (nextpow2 (-31), 5) %!assert (nextpow2 (1:17), [0 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5]) +## Special cases +%!assert (nextpow2 (0), 0) +%!assert (nextpow2 (1), 0) +%!assert (nextpow2 (Inf), Inf) +%!assert (nextpow2 (-Inf), Inf) +%!assert (nextpow2 (NaN), NaN) +%!assert (nextpow2 ([1, Inf, 3, -Inf, 9, NaN]), [0, Inf, 2, Inf, 4, NaN]) +## Test input validation %!error nexpow2 () %!error nexpow2 (1, 2) +%!error nextpow2 ("t")