|
|
|
новичок
      
участник
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;
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| Это не "фигня", а проблема вещественных чисел, общеизвестная.
|
|
|
|
|
новичок
      
участник
Last Login: 18.03.2006 14:54
Сообщ.: 8,
Visits: 89
|
|
Я уже нашел решение - я сравниваю числа как строки, а не вычитаю их.
Просто хотел найти более естественное решение проблемы...
Видно не судьба!
Тем кому интересно - могут посмотреть
http://forum.sources.ru/index.php?showtopic=81239
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| Это ты сам себе какой-то геморрой придумал и теперь через то место, где он(геморрой) располагается и решил проблему.:-))
|
|
|
|
|
новичок
      
участник
Last Login: 18.03.2006 14:54
Сообщ.: 8,
Visits: 89
|
|
Гемор придумал не я, а Дельфи.
А то что решил через задницу, так я об этом и говорил! А если знаешь как решить не через задний проход, так не умничай, а скажи!
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| Я не умничаю.Это просто ты тупишь. Умудриться на 10 строках кода налепить столько GOTO в программе на Паскале !!! Это нужно быть уникалом !!! Честно. У меня в программе по оптовому складу НЕТ НИ ОДНОГО безусловного перехода !!!Да и вообще, я забыл, что это такое. НЕТУ В БП НЕОБХОДИМОСТИ. Это говорит о чем ?.. Мало знаем.Если бы еще знать, ЧТО ТЫ ХОТЕЛ СДЕЛАТЬ, может быть кто-нибудь и помог бы...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| По ссылке тебе ответили так же, как и я, только более подробно.Внятно вопрос поставь, может что-то и выйдет не через ж..пу. Да, еще. Циклы есть не только for. Есть еще while условие/ repeat until условие
|
|
|
|
|
новичок
      
участник
Last Login: 18.03.2006 14:54
Сообщ.: 8,
Visits: 89
|
|
Вот именно, что по ссылке объяснили "более подробно". Поскольку, если бы я знал что это такое, то не спрашивал бы! Логично?
А по поводу "БП", скажи а чем он плох? Лично я не вижу особой разницы. Может я чего-то и не знаю, так просвети!
И еще:
1.цикл for быстрее
2. цикл while туда не тулится!
|
|
|
|
|
|
| | |