Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обьясните!!!Что-то непонятное как считает Delphi?


jiurafgdfg ©   (2006-04-20 15:41:00) 

Написал итерационную программу!
Есть два выражения:
 usop.C[usop.CtypKolvo,i]:=usop.C2kCw[usop.CtypPitania-1,i]*usop.PitaniaToMejc*usop.cf[i]/(usop.OtwalaToMejc*(usop.CkCp[usop.CtypPitania-1,i]*cymma+usop.C2kCw[usop.CtypPitania-1,i]*usop.OtboraToMejc/usop.OtwalaToMejc));

и

usop.C[usop.CtypKolvo,i]:=usop.C2kCw[usop.CtypPitania-1,i]* (usop.PitaniaToMejc*usop.cf[i] )/(usop.OtwalaToMejc*(usop.CkCp[usop.CtypPitania-1,i]*cymma+usop.C2kCw[usop.CtypPitania-1,i]*usop.OtboraToMejc/usop.OtwalaToMejc));

Как видно, они полность идентичны, за исключением того, что во втором есть скобки. Но так как все члены перемножаются это не должно играть роли

Запуская программу с первым выражением получается 1283 итерации, а со вторым 756 итераций! Выражения стоят подряд и я ничего не меняю кроме как то второе то первое зеаключаю в {} - чтоб оно не выолнялось!

обе переменные
usop.C[usop.CtypKolvo,i] - определены как Extended!!!

Как такое может быть???


Gydvin   (2006-04-21 06:56:00) [1]


> Pavia ©   (20.04.06 22:33) [9]

Да нет вроде одинаковы..
D7


Pavia   (2006-04-20 22:33:00) [2]

Кажись знаю ответ.
Нетак давно в Delphi7 был обнаружил глюк одна и таже строчки при равных входных условиях считала по разному. глюк не распростроняется на другии версии. Ошибка в иницилизации сопроцесоора(fpu). Толи забыли выставить значение толи в циферке ошиблись. а при вызови messagebox виндоус выставлял другое число.
лечится
Set8087CW()
Если не выставить верное значение
procedure TForm1.FormCreate(Sender: TObject);
var a,b,c:Extended;
begin
b:=0.178176194206200011;
c:=30005788672;
ShowMessage(FloatToStr(b*cos(pi*c)*sin(pi*c)));
ShowMessage(FloatToStr(b*cos(pi*c)*sin(pi*c)));
end;


Джо   (2006-04-20 18:37:00) [3]

> [5] Ega23 ©   (20.04.06 17:29)
> Ерунда какая-то. Я вот тоже хардкорный код знаю:

Не стыдно такое постить? Это ж из категории XXX... 8-)


Desdechado   (2006-04-20 18:32:00) [4]

есть такая программистская мудрость - от перестановки слагаемых сумма МЕНЯЕТСЯ
а у тебя перестановка порядка умножения, что еще хуже


Gero   (2006-04-20 17:50:00) [5]

> Как такое может быть???

Продолжай писать в таком стиле, еще и не такое будет.


Ega23   (2006-04-20 17:29:00) [6]

Ерунда какая-то. Я вот тоже хардкорный код знаю:

#include
main(t,_,a)char *a;{return!0


Рамиль   (2006-04-20 16:39:00) [7]

Могу предположить, что usop.PitaniaToMejc и usop.cf[i] числа одного порядка, а usop.C2kCw[usop.CtypPitania-1,i] >> или << чем они. Хотя не уверен. Результат то одинаковый получается, надеюсь?


Джо   (2006-04-20 15:49:00) [8]

> [2] jiurasdfsdfs   (20.04.06 15:44)
> ДА они здесь и не нужны - программа слишком большая....

Повторяю, отвечать вопрос о кол-ве итераций, не видя никаких итераций бессмысленно.

П.С. Расставь скобки по-человечески. Твой код читать невозможно, не думай, что охота кому-то в нём ковыряться.
И прочитай раздел справки Operator precedents, там как раз и описан порядок выполнения операций в Object Pascal.


jiurasdfsdfs   (2006-04-20 15:44:00) [9]

ДА они здесь и не нужны - программа слишком большая....Неточность кроется только в этих 2-х строках! Остальное не меняется!


Джо   (2006-04-20 15:43:00) [10]

В приведенном коде нет никаких итераций.


Наверх

Титульная страница Поиск, карта сайта Написать письмо