Value Exceeds while dividing

I have 2 matrices
A ranges between -32768 to 32767 ,it is 100x1 matrix
class(A) is int16
B matrix ranges from -1473 to 1570,it is 100x1 matrix
class(B) is double
asuming i divide manually the values ,max(B)/max(A), i get correct answer , but while runnning in m file , the value exceeds
The maximum value must be .049 ,but i get 1.73,
I converted both A and B to double,still i get same error ,
please assist

 Accepted Answer

What happens if you break it up and display the values:
ma = max(A)
class(ma)
size(ma)
mb = max(B)
class(mb)
size(mb)
mb / ma
mb ./ ma

9 Comments

class of ma is int16
class of B is double
size same for A,B-100x1
max(A) is 32767,B is 1540
mb/ma-
??? Error using ==> mrdivide
Linear algebra is not supported for
integer data types.
mb./ma
??? Error using ==> rdivide
Class of operand is not supported.
After converting to double
double(max(B))./double(max(A))
ans =
0.0470
So the problem has gone away?
it is manula calculation in command window,but if i perform in m file i get error
What happens if you paste the commands into the .m file right after your current calculation ?
ma = max(A)
class(ma)
size(ma)
mb = max(B)
class(mb)
size(mb)
double(mb) ./ double(ma)
and what is the exact line you are using for calculation at the moment?
same answer
0.0470
Walter i mean if i divide the max values ,the value is 0.04,y do i get larger values than that ,while dividing others
Walter Roberson
Walter Roberson on 26 Nov 2012
Edited: Walter Roberson on 26 Nov 2012
I don't know: you do not show the other values you are dividing.
If you are dividing elements of A and B pairwise, then the maximum possible result is reached if max(B(B>0)) is at the same location as min(A(A>=0)), or if min(B(B<0)) is at the same location as min(A(A<0)); and the maximum can be infinite because 0 is a valid member of A; NaN is also a possible output if a 0 in B happens to be at the same location as a 0 in A.
Walter suppose am dividing a 14bit value/16 bit value,will i get 5 bit value or larger than that
Any non-zero value divided by 0 gives an infinite result, which is going to be more than 5 bits.
If you have a 14 bit value divided by 1 (which is a valid 16 bit value) then you are going to get a 14 bit value output.
Any 14 bit value divided by a value that could be represented (without compression) in 8 or fewer binary digits, is going to give a result that requires more than 5 bits.
64 (7 bits) / 2 (2 bits) = 32 (6 bits) so the numbers represented as 14 bits can be pretty small and you would still have problems.
Thanks walter

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!