Why break loop is not working?

2 visualizaciones (últimos 30 días)
Athira T Das
Athira T Das el 22 de Jul. de 2022
Comentada: Walter Roberson el 22 de Jul. de 2022
The value of e at certain points is infinity. But the break loop is not working.
clc; clear all; close all;
M=3
M = 3
for m1=0:M
m1;
for s1=0:1/2:m1/2
s1;
for s2=0:1/2:(M-m1)/2
s2;
if (m1-(2*s2)) < 0
break
end
for j1=0:m1-2*s1
j1;
if gamma(1+m1-(2*s2-j1))== nan;
break
end
if gamma(1+m1-(2*s2-j1))== Inf;
break
end
if gamma(1+m1-(2*s2-j1)) == 0
break
end
for j2=0:(M-m1-(2*s2))
j2;
q=factorial(m1-(2.*s2));
w=factorial(j1);
e=gamma(1+m1-(2.*s2)-j1)
end
end
end
end
end
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = Inf
e = Inf
e = 1
e = 1
e = 1
e = 1
e = 1
e = 2
e = 2
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = Inf
e = 2
e = 2
e = 1
e = 1
e = 1
e = 1
e = 2
e = 2
e = 1
e = 6
e = 2
e = 1
e = 1
e = 6
e = 2
e = 1
e = 6
e = 2
e = 6

Respuesta aceptada

SAI SRUJAN
SAI SRUJAN el 22 de Jul. de 2022
Editada: SAI SRUJAN el 22 de Jul. de 2022
Hi Athira T Das,
From my understanding of your question,the value of e is Inf in some cases and you want to avoid that using break statements.We can see that the value of e is inf because you are checking for a different condition in the if statement.Check for the comments in the following code snippet for better understanding,
clc; clear all; close all;
M=3;
for m1=0:M
m1;
for s1=0:1/2:m1/2
s1;
for s2=0:1/2:(M-m1)/2
s2;
if (m1-(2*s2)) < 0
break
end
for j1=0:m1-2*s1
j1;
if gamma(1+m1-(2*s2-j1))== nan;
break
end
% Here you are checking for gamma(1+m1-2*s2+j1).
if gamma(1+m1-(2*s2-j1))== Inf;
break
end
if gamma(1+m1-(2*s2-j1)) == 0
break
end
for j2=0:(M-m1-(2*s2))
j2;
q=factorial(m1-(2.*s2));
w=factorial(j1);
% Whereas here you are assigning gamma(1+m1-2*s2-j1.)
% We can see that sign of j1 is different.
% Change this to avoid assigning inf to e.
e=gamma(1+m1-(2.*s2)-j1);
end
end
end
end
end
% Consider using isnan and isinf
  1 comentario
Walter Roberson
Walter Roberson el 22 de Jul. de 2022
isnan() and isinf() can be combined
if ~isfinite(gamma(1+m1-(2*s2-j1))); break; end

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 22 de Jul. de 2022
if gamma(1+m1-(2*s2-j1))== nan;
That will never be true. Observe:
x = nan
x = NaN
x == x
ans = logical
0
x ~= x
ans = logical
1
You need to use isnan()

Categorías

Más información sobre Numeric Types en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by