指定された tempMaxAngle より小さい 90 桁の除数を見つける関数を作成しようとしています。たとえば、関数は tempMaxAngle=7 の場合は 6、tempMaxAngle=31 の場合は 30、tempMaxAngle=23 の場合は 22.5 などを返す必要があります。残念ながら、正しく機能していません。奇妙な値が返されます。ここに私のアルゴリズムがあります:
function maxAngle = angletest(tempMaxAngle)
format long g;
tempMaxAngle = tempMaxAngle*10;
tempMaxAngle = floor(tempMaxAngle)/10;
while mod(90,tempMaxAngle)>0
modResult =mod(90,tempMaxAngle)
tempMaxAngle = tempMaxAngle - 0.1
end
maxAngle=tempMaxAngle;
end
tempMaxAngle=7 の部分的な結果 (セクションの結果):
tempMaxAngle =
6.9
modResult =
0.299999999999995
tempMaxAngle =
6.8
modResult =
1.59999999999999
tempMaxAngle =
6.7
modResult =
2.89999999999998
tempMaxAngle =
6.6
modResult =
4.19999999999998
tempMaxAngle =
6.5
modResult =
5.49999999999998
tempMaxAngle =
6.4
modResult =
0.399999999999966
tempMaxAngle =
6.3
modResult =
1.79999999999996
tempMaxAngle =
6.2
modResult =
3.19999999999997
tempMaxAngle =
6.1
modResult =
4.59999999999996
tempMaxAngle =
6
modResult =
5.99999999999995
tempMaxAngle =
5.9
modResult =
1.49999999999994
tempMaxAngle =
5.8
modResult =
2.99999999999993
tempMaxAngle =
5.7
modResult =
4.49999999999993
tempMaxAngle =
5.60000000000001
modResult =
0.399999999999929
単純な 6.9、6.8、6.7 などのモジュロ関数ではなく、そのような値を返し続けるのはなぜですか? どうすれば修正できますか?