While Do Проблем

2 отговора 146 прегледа
#1

While Do Проблем

Здравейте ,
Можете ли да ми помогнете имам следния проблем:

procedure TForm1.Button1Click(Sender: TObject);
var i:Extended;step:extended;
begin

step := 0.1;
i := 0;

while (i < 10.0) do i := i + Step;
ShowMessage(FloatToStr(i));

// "i" trqbva da bude 10 i e taka


step := 0.1;
i := 0;
while (i <= 10.0) do i := i + Step;
ShowMessage(FloatToStr(i));

//"i" trqbva da bude 10,1 ama ne e ?????

end;

Ако направя i,step: real ili double и в двата случая е 10,1
Защо се получава така?Ако step е 0,2 или 0,25 си работи нормално

Предварително благодаря.

Редактирано от trump на

Отговор
в отговор на trump #2

Re: While Do Проблем

Както написа един колега във форума преди време "Аритметиката с плаваща запетая не прощава на никого!"
А колко е, като не е 10.1? Предполагам, че е нещо много близо до 10.1, нали?
Когато работиш с числа с плаваща запетая има едно желязно правило, което трябва да спазваш - забрави за използване на '='!!! Сравненията трябва да са ти от вида i = 10.1 +/- epsilon, където epsilon ти е някаква достатъчно малко число (зависи от случая, но при теб май би свършило работа 0.01 например). Това можеш да реализираш с "логическо и" (по-голямо от 10.1 - epsilon И по-малко от 10.1 + epsilon) или със сравнение на абсолютната стойност (abs(i - 10.1) < epsilon).

Отговор
в отговор на andrew_nikoloff #3

Re: While Do Проблем

Благодаря за бързия отговор.

Отговор