File Exchange

## Order of magnitude of number

version 1.1 (1.24 KB) by

Returns the order of magnitude of one or more numbers.

14 Downloads

Updated

Returns the order of magnitude of one or more numbers. Works on arrays. You can also specify the number base.

%Ex:
order( 1.2e-5 ) %returns -5
order(1) = 0
order( 1.12344e8 ) %returns 8
%Specify base 2:
order(1.2*2^5,2) %returns 5

Robert

### Robert (view profile)

If you input at the command line:

log(1000)./log(10) - 3

you will see why the original fails at this value. It also fails and a number of other (positive) powers of 10 as shown by the following:

b = -100:100
for q = 1:length(b)
a(q) = order(10^b(q));
end
figure(1)
plot(b, a, 'kx', b, b, 'ro')
grid on

If the black 'x' is not inside a red 'o' then it's a failure.
No failures of negative powers in this range.

Ben

### Ben (view profile)

Now tested with vector:

>> floor(single(log([1000 100 1000 10000 100])./log(10)))

ans =

3 2 3 4 2

Ivar Eskerud Smith

### Ivar Eskerud Smith (view profile)

Joel, I seem to experience the same problem when the input is an exact integer value. I think this will be a problem when the input is a whole power of the base. I am not sure yet how this shuold be solved, one would have to do a test on the input to detect if it is a whole power of the base within numerical precision

Joel

### Joel (view profile)

I seem to experience a severe precision error using this function. I get order(1000) = 2. order(1000.000000000001) gives me the correct value of 3.

Irem Altan

Carlos

Thanks!

Ndilokelwa Luis

Efficient.

John

### John (view profile)

I see what you're doing and it makes sense, thanks for the reply!

Ivar Eskerud Smith

### Ivar Eskerud Smith (view profile)

Thanks John. But I think one should leave the order of magnitude of 0 to be minus infinity, that`s just what it is. If you set it to zero, consider this:
x=0;
o = order(x);
x2=10^o;
x2 and x should then be the same, but they won`t be if you set the order to 0. x2 would then be 1.

John

### John (view profile)

added the following to the bottom:

% If the value is zero then the order is set to zero
n(isinf(n)) = 0;

John

works great!

### Updates

 18 Jun 2012 1.1 Added possibility to specify base.
##### MATLAB Release
MATLAB 7.14 (R2012a)
##### Acknowledgements

Inspired by: logb

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.