![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обьясните!!!Что-то непонятное как считает 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]В приведенном коде нет никаких итераций.