Странность в цикле while

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Странность в цикле while

Сообщение Dry » 15.05.2008 (Чт) 23:27

Вообщем есть такой простой код:

Код: Выделить всё
Option Explicit

Private Sub Command1_Click()
Dim x As Double
Dim y As Double
x = 1

Do While x <= 1.3
y = x + 2
Print Round(y, 3)
x = x + 0.1
Loop
End Sub


На сколько я понимаю он должен вывести на экран 4 значения y, но выводит только 3, как будто x=1.3 не входит в x<=1.3! Почему так происходит? Или я что то непойму? :roll:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2008 (Пт) 0:22

Не входит. Действительно.

Поставь на выходе
Код: Выделить всё
MsgBox x - 1.3
и посмотри, насколько x больше числа 1.3 .
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Сообщение Dry » 16.05.2008 (Пт) 0:30

Теперь вообще не пойму как так происходит! Если пишу MsgBox x то выдает 1.3, а MsgBox x - 1.3 выдает разницу на "2,22044604925031E-16" почему такое происходит? и как от этого избавится, что бы мне выдало 4 моих значения! :?

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 16.05.2008 (Пт) 1:46

Dry, это ошибка округления. Просто прибавляй к верхней гранцие цикла число, равное, скажем, половине шага цикла.
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Сообщение Dry » 16.05.2008 (Пт) 2:01

Всем спасибо за ответы, я вроде понял :) Но меня все равно удивляет Msgbox 1.3-(1+0.3) :roll:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2008 (Пт) 8:14

Вещественные числа нельзя сравнивать на равенство.
Только так: (a1-a2)<e
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList  
cron