Войти
ДельфинарийФорум

неясный глюк((

Страницы: 1 2 Следующая »
#0
19:48, 14 ноя. 2010

delphi 7. создал функцию - кидаю в нее переменные "cardinal". функция находит косинус синус между двумя точками и проводит дальше вычисления. только вот ошибка вылетает. полдня ее искал - нашел: косинус находится отлично, а синус - какое-то астрономическое число. каждую переменную проверил, переменные целые больше нуля, посчитал на калькуляторе - все правильно. поменял на integer... и все заработало...
сталкивался кто-нибудь с таким? теперь думаю не выпендриваться: переписать все целые на integer, а дроби на real.


#1
23:12, 14 ноя. 2010

Ну видимо у тебя есть отрицательные значения и всего та...

#2
17:14, 15 ноя. 2010

vakula
> каждую переменную проверил, переменные целые больше нуля

#3
17:18, 15 ноя. 2010

когда у тебя (19-21)/25=47634857899893 - это не "всего та"...

#4
17:42, 15 ноя. 2010

Ну у тебя же 19-21 это и есть отрицательное значение...
-2 / 25 = число с минусом!

#5
17:51, 15 ноя. 2010

сохраняю я то в real, а не в cardinal. и перед этим проводятся совершенно идентичные вычисления косинуса с переменными, объявленными вместе с этими, - там нет ошибки.

#6
17:57, 15 ноя. 2010

Выкладывай код, вообще не понятно где ты чего делаешь...

Ты всмысле так делаешь:
real := (cardinal - cardinal) / cardinal?
Если да, то у тебя и будет не то значение, которое ожидаешь...

#7
18:07, 15 ноя. 2010

function routePoint(x1,y1,x2,y2,i: cardinal): pointword;
var
coss, l, sinn: real;
begin
L:=sqrt(sqr((x1-x2))+sqr(y1-y2));
coss:=(x2-x1)/L;
sinn:=(y2-y1)/L;
...

#8
18:17, 15 ноя. 2010

сейчас попробовал повторить - чтобы данные посылаемые точнее сказать. опять вылетает. y2=184, y1=201, l=22 (округленно). ладно, c integer алгоритм отлично работает...

#9
18:32, 15 ноя. 2010

cardinal - cardinal = cardinal
У тебя получается:
coss:=cardinal с большим числов / L;

#10
18:37, 15 ноя. 2010

real=(cardinal-cardinal)/real;

#11
18:43, 15 ноя. 2010

real=(cardinal-cardinal)/real;

тоже самое, что и:

cardinalC = (cardinalA - cardinalB); // Здесь будет очень большое число, потому что значение уйдёт в минус
realB = cardinalC / realA; // здесь будет большое число делиться

Так понятнее?

#12
19:03, 15 ноя. 2010

но у меня нет cardinalC и промежуточное значение не присваивается. получается, что: real=cardinal-cardinal - неверное выражение?

#13
19:19, 15 ноя. 2010

ну в целом ясно: delphi сохраняет промежуточные данные в формате вычисляемых переменных. это подтверждается результатами - числа выходят именно такие, никогда бы не догадался. лучше я действительно переведу числа в integer во избежание повторения такой ошибки. спасибо, что объяснил.

#14
19:26, 15 ноя. 2010

vakula
Промежуточное значение получится в любом случае, нельзя произвести операцию и не сохранить никуда результат (ну кроме оптимизаций компилятором)...
Это не только к Делфи относится, любой язык программирования поступит также...

Страницы: 1 2 Следующая »
ДельфинарийФорум

Тема в архиве.