Непонятное округление чисел
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Непонятное округление чисел Expand / Collapse
Автор
Сообщение
05.03.2006 19:04
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 18.03.2006 14:54
Сообщ.: 8, Visits: 89
Помогите, люди!
Столкнулся с проблемой. Хочу выяснить причину. Происходит такая фигня - вводятся несколько чисел (0..1) в цикле и вычисляется, сколько до 0 осталось. Так вот, при вычислении последнего остатка вместо 0 выдается число что-то типа -2,45451Е-17.
Причем, все числа я ввожу нормальные, к примеру, 0,4;0,5;0,1.
Вот кусок кода:

rep5:
ost:=1; temp:=0;
for i:=1 to Round(KolI) do begin
rep4:
if i=Round(KolI) then temp:=ost;
buf:=strtofloat(inputbox('StatWorks - Ââîä ÷àñòîñòåé',
'Ââåäèòå ÷àñòîñòü íà '+inttostr(i)+'-îì èíòåðâàëå.'+#13#10+
'Îñòàëîñü äî 1 - '+floattostr(ost)+'.', floattostr(temp)));
if (buf>=0) and (buf<=1) then q[i]:=buf else goto rep4;
if ((ost-q[i])>=0) and ((ost-q[i])<=1) then ost:=ost-q[i]
else goto rep4;
end;
if ost<>0 then begin MessageBox(Handle,'Ââåäåííûå ÷àñòîòû â ñóììå íå ñîñòàâëÿþò 1.'+#13#10+
'Ïîâòîðèòå ââîä.',Version, MB_ICONWARNING); goto rep5; end;
Сообщ. #892136
06.03.2006 9:38
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Это не "фигня", а проблема вещественных чисел, общеизвестная.
Сообщ. #892156
10.03.2006 21:36
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 18.03.2006 14:54
Сообщ.: 8, Visits: 89
Я уже нашел решение - я сравниваю числа как строки, а не вычитаю их.
Просто хотел найти более естественное решение проблемы...
Видно не судьба!
Тем кому интересно - могут посмотреть
http://forum.sources.ru/index.php?showtopic=81239
Сообщ. #892493
13.03.2006 9:20
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Это ты сам себе какой-то геморрой придумал и теперь через то место, где он(геморрой) располагается и решил проблему.:-))
Сообщ. #892543
16.03.2006 1:28
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 18.03.2006 14:54
Сообщ.: 8, Visits: 89
Гемор придумал не я, а Дельфи.
А то что решил через задницу, так я об этом и говорил! А если знаешь как решить не через задний проход, так не умничай, а скажи!
Сообщ. #892865
16.03.2006 9:07
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Я не умничаю.Это просто ты тупишь. Умудриться на 10 строках кода налепить столько GOTO в программе на Паскале !!! Это нужно быть уникалом !!! Честно. У меня в программе по оптовому складу НЕТ НИ ОДНОГО безусловного перехода !!!Да и вообще, я забыл, что это такое. НЕТУ В БП НЕОБХОДИМОСТИ. Это говорит о чем ?.. Мало знаем.Если бы еще знать, ЧТО ТЫ ХОТЕЛ СДЕЛАТЬ, может быть кто-нибудь и помог бы...
Сообщ. #892873
16.03.2006 9:17
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
По ссылке тебе ответили так же, как и я, только более подробно.Внятно вопрос поставь, может что-то и выйдет не через ж..пу. Да, еще. Циклы есть не только for. Есть еще while условие/ repeat until условие
Сообщ. #892874
17.03.2006 17:25
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 18.03.2006 14:54
Сообщ.: 8, Visits: 89
Вот именно, что по ссылке объяснили "более подробно". Поскольку, если бы я знал что это такое, то не спрашивал бы! Логично?
А по поводу "БП", скажи а чем он плох? Лично я не вижу особой разницы. Может я чего-то и не знаю, так просвети!
И еще:
1.цикл for быстрее
2. цикл while туда не тулится!
Сообщ. #893136
17.03.2006 17:33
Supreme Being

Supreme BeingSupreme Being