MATLAB: Switch statement won’t output one of the cases — even when it happens.

bugcaseswitchsyntax

Hello folks, This is the piece of code, very straightforward:
%The length(f) is 496.
%The length(delta_I) is 19.
for i=1:length(f)
for j=1:length(delta_I)
%Determine witch AWG is the one for position i,j, given its area
switch wire_Area(i,j)
case 424e-3; AWG_pos(i,j)=1;
case 336e-3; AWG_pos(i,j)=2;
case 267e-3; AWG_pos(i,j)=3;
case 212e-3; AWG_pos(i,j)=4;
case 168e-3; AWG_pos(i,j)=5;
case 133e-3; AWG_pos(i,j)=6;
case 105e-3; AWG_pos(i,j)=7;
case 83.7e-3; AWG_pos(i,j)=8;
case 66.3e-3; AWG_pos(i,j)=9;
case 52.6e-3; AWG_pos(i,j)=10;
case 41.7e-3; AWG_pos(i,j)=11;
case 33.1e-3; AWG_pos(i,j)=12;
case 26.2e-3; AWG_pos(i,j)=13;
case 20.8e-3; AWG_pos(i,j)=14;
case 16.5e-3; AWG_pos(i,j)=15;
case 13.1e-3; AWG_pos(i,j)=16;
case 10.4e-3; AWG_pos(i,j)=17;
case 8.23e-03; AWG_pos(i,j)=18;
case 6.53e-03; AWG_pos(i,j)=19;
case 5.18e-03; AWG_pos(i,j)=20;
case 4.10e-03; AWG_pos(i,j)=21;
case 3.26e-03; AWG_pos(i,j)=22;
case 2.58e-03; AWG_pos(i,j)=23;
case 2.05e-03; AWG_pos(i,j)=24;
case 1.62e-03; AWG_pos(i,j)=25;
case 1.29e-03; AWG_pos(i,j)=26;
case 1.02e-03; AWG_pos(i,j)=27;
case 8.10e-04; AWG_pos(i,j)=28;
case 6.42e-04; AWG_pos(i,j)=29;
case 5.09e-04; AWG_pos(i,j)=30;
case 4.04e-04; AWG_pos(i,j)=31;
case 3.20e-04; AWG_pos(i,j)=32;
case 2.54e-04; AWG_pos(i,j)=33;
case 2.01e-04; AWG_pos(i,j)=34;
case 1.60e-04; AWG_pos(i,j)=35;
case 1.27e-04; AWG_pos(i,j)=36;
case 1.00e-04; AWG_pos(i,j)=37;
case 7.97e-05; AWG_pos(i,j)=38;
case 6.32e-05; AWG_pos(i,j)=39;
case 5.01e-05; AWG_pos(i,j)=40;
otherwise
AWG_pos(i,j)=NaN;
end
end
end
Here's an example of the trouble I am having: >> wire_Area(1,1)
ans =
10.4000000000000e-003
That is the first position for my calculated results for wire_Area, that should be hitting this case
case 10.4e-3; AWG_pos(i,j)=17;
But it just isn't.
>> AWG_pos(1,1)
ans =
NaN
Help??

Best Answer

You have used all floating point numbers in the switch case. It is not the correct method to check equality for floating point numbers.
You have to set some tolerance and get the difference, if the abs difference is satisfies the tolerance, then floating numbers are equal. Check the below link for discussion.