Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
#1

Отладчик VS показывает разные значения - C++

28.04.2014, 18:22. Просмотров 300. Ответов 7
Метки нет (Все метки)

При отладке постоянно встречаюсь с такой фигнёй: до входа в какую-либо процедуру отладчик показывает одно значение переменной, а после - другое. Но тогда они отличались на несколько тысячных. Сейчас он вообще офигел! Мало того, что умножает числа на ~1000, дык ещё и равные числа делает неравными!!
Либо я туплю, либо отладчик в говно погрешный.
0
Миниатюры
Отладчик VS показывает разные значения   Отладчик VS показывает разные значения  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 18:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отладчик VS показывает разные значения (C++):

Отладчик не показывает часть переменных - C++
Здравствуйте! Подскажите, пожалуйста, почему отладчик (MSVS 2013) не показывает некоторые переменные, например, hr: Если...

используя отладчик, проанализировать значения переменных - C++
Три программы, приведенные ниже, исполнить в среде и, используя отладчик, проанализировать значения переменных. Программы и результаты...

Отладчик Visual Sudio: непонятные значения в окне "Локальные" - C++
В visual studio в окне "локальные" в столбце "значения" вместо значений элементов вектора какая-то фигня.Как изменить формат значений в...

Разные значения в дебаге и релизе - C++
В общем в чем суть, пишу игру, участок сетевого кода написан с помощью sfml. В дебаге программа не работает, потому что изходящие и...

Где ошибка? выдает разные значения - C++
#include<iostream> #include<iomanip> #include<cmath> using namespace std; int main() { double z1,z2, a; cout<<"Vvedite a=";...

Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран - C++
Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран. Помогите пожалуйста!!!!

7
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,605
28.04.2014, 18:40 #2
По картинкам ничего не ясно. Может у них разная область видимости.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
28.04.2014, 18:40 #3
WinRar007, Не очень ясно что там за код у тебя, но операции с плавающей точкой в принципе "погрешны". Вот достаточно неплохой пост на эту тему.
0
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:15  [ТС] #4
Дело в том, что раньше всё было нормально. Но после очередной доработки всё пошло как-то не так. Я, если честно, уже начинаю сомневаться, что это конкретно от моего алгоритма, ведь там нет ничего сложного:
До:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (Length <= Radius)
                    {
                        cout << "Столкновение тела № " << i << " и тела № " << i2 << "(Classic)" << endl;
                        if (Bodies[i]->Mass <= Bodies[i2]->Mass)
                        {
                            Bodies[i2]->SumB(Bodies[i]);
                            DelFromRander(i);
                            //Del = 1;
                        }
                        else
                        {
                            Bodies[i]->SumB(Bodies[i2]);
                            DelFromRander(i2);
                            //Del = 2;
                        }
                        if (i > i2)
                        {
                            i--;
                        }
                        break;
                    }
После:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
for (float Num = 0; Num <= 10; Num++)
                                {
                                    Length = sqrt(pow(Bodies[i]->X - Bodies[i2]->X, 2)
                                        + pow(Bodies[i]->Y - Bodies[i2]->Y, 2));
                                    Radius = Bodies[i]->R + Bodies[i2]->R;
                                    if (Length <= Radius)
                                    {
                                        cout << "Столкновение тела № " << i << " и тела № " << i2 << "(New)" << endl;
                                        if (Bodies[i]->Mass <= Bodies[i2]->Mass)
                                        {
                                            Bodies[i2]->SumB(Bodies[i]);
                                            DelFromRander(i);
                                            Del = 1;
                                        }
                                        else
                                        {
                                            Bodies[i]->SumB(Bodies[i2]);
                                            DelFromRander(i2);
                                            Del = 2;
                                        }
                                        if (i > i2)
                                        {
                                            i--;
                                        }
                                        //break;
                                    }
                                    if(!(Del == 1))
                                    {
                                        Movement(T / 10, i);
                                    }
                                    if (!(Del == 2))
                                    {
                                        Movement(T / 10, i2);
                                    }
                                }
Код процедуры SumB:
C++
1
2
3
4
5
6
7
8
9
void SumB(Body *b2) //Слияние объектов
    {
        Velocity.x = ((Mass * Velocity.x) + (b2->Mass*b2->Velocity.x)) / (Mass + b2->Mass);
        Velocity.y = ((Mass * Velocity.y) + (b2->Mass*b2->Velocity.y)) / (Mass + b2->Mass);
        Mass = Mass + b2->Mass;
        R = sqrt(sqrt(abs(Mass))) * 2;
        X = X - ((X - b2->X) / 2);
        Y = Y - ((Y - b2->Y) / 2);
    }
Добавлено через 2 минуты
Раньше они были СОВСЕМ непогрешны, но после цикла...
Процедура Movement сводится к простому перемещению тела, и я её не стал описывать.

Добавлено через 1 минуту
Может у них разная область видимости.
Что это означает. Си++ месяц изучаю.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
28.04.2014, 20:27 #5
Цитата Сообщение от WinRar007 Посмотреть сообщение
Я, если честно, уже начинаю сомневаться, что это конкретно от моего алгоритма, ведь там нет ничего сложного
Если ты думаешь, что ссылка на ту статью - это ерунда, то это совершенно напрасно. Советую максимально внимательно прочитать и осмыслить.
Добавил цикл и стала накапливаться ошибка. Читай статью, короче.
0
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:35  [ТС] #6
Если ты думаешь, что ссылка на ту статью - это ерунда, то это совершенно напрасно. Советую максимально внимательно прочитать и осмыслить.
Добавил цикл и стала накапливаться ошибка. Читай статью, короче.
Пфф... Я её и прочитал. По этому и сделал такой вывод. Ещё, прогнав через отладчик, увидел, что без цикла погрешности ВООБЩЕ нету. ВООБЩЕ. А ноль в цикле накапливаться не может.

Добавлено через 2 минуты
Вообще, не хочу называть себя учёным, но я с Ассемблером дело имел около года, и прекрасно знаю представление данных. Я же сказал, что погрешность заподозрил сразу, но потом её отсеял.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
28.04.2014, 20:43 #7
WinRar007, Ну что тут скажешь - дело хозяйское
Что-то про твой код утверждать без полного анализа я не могу. Поэтому, собственно, раз такой ответ и предложение разобраться не устраивают, то ничем более помочь не смогу.
0
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:45  [ТС] #8
Что-то про твой код утверждать без полного анализа я не могу. Поэтому, собственно, раз такой ответ и предложение разобраться не устраивают, то ничем более помочь не смогу.
Спасибо за всё, сам уже разобрался. Начал отладку в режиме релиза. Мой трэш...
0
28.04.2014, 20:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 20:45
Привет! Вот еще темы с ответами:

Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран - C++
Подскажите, пожалуйста, как вывести повторяющиеся два или более раз числа в массиве.

Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран - C++
3. Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран.

Как сделать так, чтобы функция rand() возвращала разные значения - C++
Добрый вечер, как можно в visual studio в цикле каждый раз задавать новые рандомные значения перменной, к примеру for(int i=0;i&lt;10;i++) ...

Сделать программу которая будет записывать разные значения в переменную типа integer - C++
Пользователь должен вводить различные параметры, например количество масок = 3, номер ошибки= 13 , номер маски = 117 и все они должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru