(Za、Zb、Zc、Zd、Ze)=(11、11、34、12、38)の時、
I=(V+W)/(V-1)の計算結果は171ですが、if I ~= 171の判定でtrueになり、continue;に流れています。
これは、浮動小数点誤差が生じ、厳密に171にならなかったためです。(浮動小数点型の等号、不等号判定を禁止にするルールを設ける事例をよく聞きます。)
浮動小数点誤差の対策として、誤差1e-5まで許容させる例を記述しました。
clear
N=100;%%歯数範囲指定
P=5; %%ピニオンの数
K=1;
for Za=5:N %探索歯数範囲
for Zb=5:N %探索歯数範囲
for Zc=5:N %探索歯数範囲
for Zd=5:N %探索範囲
for Ze=5:N %探索範囲
U=Zc/Za; %i0
V=(Zb*Ze)/(Zc*Zd); %i0'
W=(Zb*Ze)/(Za*Zd); %i0"
if U<=1
continue
end
if V<=1
continue
end
if W<=1
continue
end
if W<=U
continue
end
if W<=V
continue
end
I=(V+W)/(V-1); %減速比計算
% 1e-5の誤差まで許容(浮動小数点誤差の対策)
if abs(I - 171) > 1e-5 %希望の減速比を入れてね…!!
continue
end
Q=gcd(Zb,Zd); %ZbとZdの最大公約数
X=(Za+Zc)/P;
Y=(Za*Zd+Zb*Ze)/(P*Q);
Z=(Zc*Zd-Zb*Ze)/(P*Q);
R=(Za+Zc)/P;
if X~=floor(X)
continue
end
if Y~=floor(Y)
continue
end
if Z~=floor(Z)
continue
end
if R~=floor(R)
continue
end
A(K,:)=[Za Zb Zc Zd Ze];
K=K+1;
end
end
end
end
end