I am looking for something like nextpow2
in MATLAB like this:
P = nextpow2(A)
returns the exponents for the smallest powers of two that satisfy $2^P\geq\left|A\right|$.
Mathematica Stack Exchange is a question and answer site for users of Wolfram Mathematica. It only takes a minute to sign up.
Sign up to join this communityI am looking for something like nextpow2
in MATLAB like this:
P = nextpow2(A)
returns the exponents for the smallest powers of two that satisfy $2^P\geq\left|A\right|$.
How about this?
nextpow2[a_] := Ceiling @ Log[2, Abs @ a];
or
nextpow2[a_] := Ceiling[RealExponent[a, 2]]
The same thing in a different style:
f1 = Ceiling @* Log2 @* Abs; (* v10 syntax *)
Or:
f2 = ⌈Log2 @ Abs @ #⌉ &;
A plot:
Plot[f2[x], {x, -10, 10}, Filling -> 0]
@*
in the documentation turns up nothing.
$\endgroup$
Composition
. See also RightComposition
. (I suppose the search failed because both @
and *
are simple wildcards.)
$\endgroup$
Jul 28, 2014 at 18:03
@*
that was added in Mathematica 10*? Note that Composition
dates to version 2.0.
$\endgroup$
You have a good answer already, but I'll mention the following since it may be useful in the future.
Many built-in functions are written in MATLAB and can be viewed, in this case edit nextpow2.m
brings up the source for this function, which can be used as a starting point to implement in Mathematica.
Not exactly the same, but very closely related is BitLength
.
BitLength[n]
gives the number of binary bits necessary to represent the integern
.For positive
n
,BitLength[n]
is effectively an efficient version ofFloor[Log[2,n]]+1
.For negative
n
, it is equivalent toBitLength[BitNot[n]]
When is it not equivalent to nextpow2
?
It works for integers only.
When the argument is positive and an integer power of 2, the result of BitLength
will be one greater than that of nextpow2
.
Ceiling[Log[2, #]] &
$\endgroup$IntegerLength[A, 2]
. $\endgroup$