annotate scripts/general/nextpow2.m @ 25236:69b21b8a0e9f

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.
author Rik <rik@octave.org>
date Thu, 12 Apr 2018 14:34:10 -0700
parents 6652d3823428
children 996d78102a71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25054
6652d3823428 maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
1 ## Copyright (C) 1995-2018 Kurt Hornik
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
2 ##
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3426
diff changeset
3 ## This file is part of Octave.
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3426
diff changeset
4 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23220
diff changeset
5 ## Octave is free software: you can redistribute it and/or modify it
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3426
diff changeset
6 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23220
diff changeset
7 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
8 ## (at your option) any later version.
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
9 ##
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3426
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
13 ## GNU General Public License for more details.
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
14 ##
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6046
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23220
diff changeset
17 ## <https://www.gnu.org/licenses/>.
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
18
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 2816
diff changeset
19 ## -*- texinfo -*-
25236
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
20 ## @deftypefn {} {@var{n} =} nextpow2 (@var{x})
20158
7503499a252b doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19788
diff changeset
21 ## Compute the exponent for the smallest power of two larger than the input.
19788
511b3ae4872b nextpow2: compute for each element of input instead of its length (bug #44291)
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
22 ##
20158
7503499a252b doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19788
diff changeset
23 ## For each element in the input array @var{x}, return the first integer
19788
511b3ae4872b nextpow2: compute for each element of input instead of its length (bug #44291)
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
24 ## @var{n} such that
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 2816
diff changeset
25 ## @tex
9167
1231b1762a9a Simplify TeXinfo and eliminate use of @iftex in arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9141
diff changeset
26 ## $2^n \ge |x|$.
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 2816
diff changeset
27 ## @end tex
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 7017
diff changeset
28 ## @ifnottex
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 9167
diff changeset
29 ## 2^n @geq{} abs (x).
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 7017
diff changeset
30 ## @end ifnottex
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
31 ##
9141
c1fff751b5a8 Update section 17.1 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
32 ## @seealso{pow2, log2}
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 2816
diff changeset
33 ## @end deftypefn
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
34
5428
2a16423e4aa0 [project @ 2005-08-23 18:38:27 by jwe]
jwe
parents: 5307
diff changeset
35 ## Author: KH <Kurt.Hornik@wu-wien.ac.at>
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
36 ## Created: 7 October 1994
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
37 ## Adapted-By: jwe
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
38
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
39 function n = nextpow2 (x)
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
40
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
41 if (nargin != 1)
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5642
diff changeset
42 print_usage ();
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
43 endif
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
44
19788
511b3ae4872b nextpow2: compute for each element of input instead of its length (bug #44291)
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
45 if (! isnumeric (x))
511b3ae4872b nextpow2: compute for each element of input instead of its length (bug #44291)
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
46 error ("nextpow2: X must be numeric");
2816
ad4bf2a82b4f [project @ 1997-03-15 21:08:25 by jwe]
jwe
parents: 2539
diff changeset
47 endif
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
48
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
49 [f, n] = log2 (abs (x));
25236
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
50 idx = (n == 0); # Find any failures of log2 function (n == 0)
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
51 n(idx) = f(idx); # and copy over value.
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
52 n(f == 0.5)--;
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3407
diff changeset
53
2539
1dca28c213f0 [project @ 1996-11-19 23:54:48 by jwe]
jwe
parents:
diff changeset
54 endfunction
12795
9e7ebbaf69ff codesprint: new tests for files in scripts/general directory
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
55
9e7ebbaf69ff codesprint: new tests for files in scripts/general directory
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
56
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
57 %!assert (nextpow2 (16), 4)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
58 %!assert (nextpow2 (17), 5)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
59 %!assert (nextpow2 (31), 5)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
60 %!assert (nextpow2 (-16), 4)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
61 %!assert (nextpow2 (-17), 5)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
62 %!assert (nextpow2 (-31), 5)
19788
511b3ae4872b nextpow2: compute for each element of input instead of its length (bug #44291)
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
63 %!assert (nextpow2 (1:17), [0 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5])
25236
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
64 ## Special cases
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
65 %!assert (nextpow2 (0), 0)
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
66 %!assert (nextpow2 (1), 0)
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
67 %!assert (nextpow2 (Inf), Inf)
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
68 %!assert (nextpow2 (-Inf), Inf)
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
69 %!assert (nextpow2 (NaN), NaN)
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
70 %!assert (nextpow2 ([1, Inf, 3, -Inf, 9, NaN]), [0, Inf, 2, Inf, 4, NaN])
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
71
25236
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
72 ## Test input validation
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
73 %!error nexpow2 ()
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
74 %!error nexpow2 (1, 2)
25236
69b21b8a0e9f nextpow2.m: Compute value correctly for Inf or NaN inputs (bug #53463).
Rik <rik@octave.org>
parents: 25054
diff changeset
75 %!error <X must be numeric> nextpow2 ("t")