MATLAB: Fix(0.05/0.05) isn’t working properly in coint counting algorithm ? If I enter let’s say 3.76 it gives me the correct answer,but when I enter 3.75,it gives me 9 coins..

coint countingdivfix?floorMATLABmod

prompt = 'What is the amount? '; Money = input(prompt); Onepound = 1.0; Fiftycent = 0.50; Twentycent = 0.20; Tencent = 0.10; Fivecent = 0.05; Onecent = 0.01;
C_Onepound = fix(Money/Onepound);
%Money div Onepound
Rest = mod(Money,Onepound);
%Rest mod Onepound
C_Fiftycent = fix(Rest/Fiftycent);
%Rest div Fiftycent
Rest = mod(Rest,Fiftycent);
%Rest mod Fiftycent
C_Twentycent = fix(Rest/Twentycent);
%Rest div Twentycent
Rest = mod(Rest,Twentycent);
%Rest mod Twentycent
C_Tencent = fix(Rest/Tencent);
%Rest div Tencent
Rest = mod(Rest,Tencent);
%Rest mod Tencent
C_Fivecent = fix(Rest/Fivecent);
%Rest div Fivecent
Rest = mod(Rest,Fivecent) ;
%Rest mod Fivecent
C_Onecent = fix(Rest/Onecent) ;
%Rest div Onecent
Rest = mod(Rest,Onecent);
%Rest mod Onecent
Number_of_Coins = C_Onepound + C_Fiftycent + C_Twentycent + C_Tencent + C_Fivecent + C_Onecent;
disp (Number_of_Coins)

Best Answer

Welcome to the word of numerical precision. Rest and FiveCent look the same but they are not equal:
What is the amount? 3.75
21 C_Fivecent = fix(Rest/Fivecent); %Rest div Fivecent
K>> Rest
Rest =
0.050000000000000
K>> Fivecent
Fivecent =
0.050000000000000
K>> Rest-Fivecent
ans =
-1.387778780781446e-17
K>> 1-Rest/Fivecent
ans =
2.220446049250313e-16
K>> fix(Rest/Fivecent) % because (Rest/Fivecent < 1) very slightly
ans =
0