| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Границы допустимых значений переменных |
| Автор: Ner-zul 26.1.2004, 14:49 |
| Пусть у меня есть переменная типа long int t; Допустим я выщитываю расстояния от заданной точки до второй движущейся в плоскости размером 600 на 400 пикселей(и где-то у себя в программе использую это расстояние ) по формуле: t=dx*dx+dy*dy (ну то есть t- это квадрат расстояния) И вот в процессе движения у меня получается что переменная t принимает черт знает какие значения, в том числе и отрицательные Сначала у меня t - было типа int и я исправил на long int, что-то изменилось но в целом это не помогло!?? Помогите пожалуйста!!!Бьюсь головой о клаву уже второй день!!! (P.S. если хотите я выложу код своей программки) |
| Автор: bel_nikita 26.1.2004, 14:52 |
| используй unsigned int или unsigned long и твои отрицательные числа пропадут |
| Автор: Paradox 26.1.2004, 14:55 | ||
Код в студию |
| Автор: Ner-zul 26.1.2004, 15:11 |
| 1)Я использовал и int и long int и unsigned long int (можно правда long double еще попробовать!!!)-во всех случаях прога глючит!!! 2)Я знаю и сам проверял что все значения "влезают" в long int, но почему-то все равно отрицательные вылезают!!! unsigned long int a; unsigned long int b; unsigned long int a2; unsigned long int b2; unsigned long int kkk; ... int x=320; int y=240; int dxp=300; int dyp=400; ... a=dxp-x; b=dyp-y; a2=a*a; b2=b*b; t=a+b; kkk=600*400; ... printf("%li %li %li %li %li %li ",a,b,a2,b2,t,kkk); ... Точка с координатами x,y - движется;стока переменных создал чтобы проверит где именно глючит;переменная kkk- просто так для проверки(она кстати равна - 2****- ну то есть отрицательная) HELP!!! HELP!!! HELP!!! |
| Автор: bel_nikita 26.1.2004, 15:28 | ||||
в этой сточке утебя проблема
у тебя получается -20, но так как unsigned, то а=FFFFFFECh. вроде бы так |
| Автор: bel_nikita 26.1.2004, 15:30 |
| что значит %li? %i - знаю. |
| Автор: Ner-zul 26.1.2004, 15:46 |
| 1)да но когда было все просто long int точно так же глючило! 2)%li - вроде так надо писать в printf когда хочешь вывести переменную типа long int( я в учебнике смотрел) %i - просто int. |
| Автор: bel_nikita 26.1.2004, 16:11 |
| Ner-zul все правильно, мне кажется, у тебя ошибка в самом алгоритме вычисления я не знаю, что ты вычесляешь, но кажется тебе надо добавить деление по модулю 2 (%320) это, типа, если у тебя точка вылезает за границу (у тебя эта граница= 320) и ты хочешь отобразить ее вновь вообщем у тебя движется точка в право. дошла до границы 320 и ты должен отобразить ее, но так как ты уже вылез за границу видимости ты должен отобразить ее уже с нуля. если это так то добавь a=(dxp-x)%320 или a=(dxp-x)&320, что выглядет красивее понял? аль нет? |
| Автор: Ner-zul 26.1.2004, 17:01 |
| Я понял что ты мне предлагаешь! и это хорошо но у меня дело в другом: Я хочу написать подобие арканоида... И щас у меня решается вопрос как отработать соударения шарика с углами и о концы управляемой перекладины(а в углах и на концах точки) и чтобы оnследить момент ударения я рассчитываю расстояние от центра шара до той точки о которую он ударится и отобьется, и когда расстояние между этими точками равно радиусу то я зоставляю шарик двигаться в обратном напрвлении ... вот такое простое условие и такая неразрешимая проблема... как я уже говорил это расстояние глючит по страшному и шарик начинает отражаться от всего чего только хочет!!! забавно и грустно.... |
| Автор: bel_nikita 26.1.2004, 17:30 | ||
| ну, это надо на код смотреть, точнее на алгоритм вычисления вычесление:
у тебя число отрицательное получается вообще, что такое а? |
| Автор: Ner-zul 26.1.2004, 17:42 |
| 1)Ну формула такая : r*r=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) 2)а = x1-x2(это я формулу на несколько переменных разделил чтобы найти где глючит) 3)Даже если разность отрицательная то а*а всегда положительное!==> r*r всегда положительное. |