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

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

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

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

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

При отладке постоянно встречаюсь с такой фигнёй: до входа в какую-либо процедуру отладчик показывает одно значение переменной, а после - другое. Но тогда они отличались на несколько тысячных. Сейчас он вообще офигел! Мало того, что умножает числа на ~1000, дык ещё и равные числа делает неравными!!
Либо я туплю, либо отладчик в говно погрешный.
Миниатюры
Отладчик VS показывает разные значения   Отладчик VS показывает разные значения  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 18:22     Отладчик VS показывает разные значения
Посмотрите здесь:
Отладчик не показывает часть переменных C++
используя отладчик, проанализировать значения переменных C++
C++ Отладчик Visual Sudio: непонятные значения в окне "Локальные"
Разные значения в дебаге и релизе C++
C++ Где ошибка? выдает разные значения
C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5119 / 4439 / 1476
Регистрация: 14.04.2014
Сообщений: 17,609
28.04.2014, 18:40     Отладчик VS показывает разные значения #2
По картинкам ничего не ясно. Может у них разная область видимости.
DrOffset
6913 / 4106 / 935
Регистрация: 30.01.2014
Сообщений: 6,904
28.04.2014, 18:40     Отладчик VS показывает разные значения #3
WinRar007, Не очень ясно что там за код у тебя, но операции с плавающей точкой в принципе "погрешны". Вот достаточно неплохой пост на эту тему.
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:15  [ТС]     Отладчик VS показывает разные значения #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 минуту
Может у них разная область видимости.
Что это означает. Си++ месяц изучаю.
DrOffset
6913 / 4106 / 935
Регистрация: 30.01.2014
Сообщений: 6,904
28.04.2014, 20:27     Отладчик VS показывает разные значения #5
Цитата Сообщение от WinRar007 Посмотреть сообщение
Я, если честно, уже начинаю сомневаться, что это конкретно от моего алгоритма, ведь там нет ничего сложного
Если ты думаешь, что ссылка на ту статью - это ерунда, то это совершенно напрасно. Советую максимально внимательно прочитать и осмыслить.
Добавил цикл и стала накапливаться ошибка. Читай статью, короче.
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:35  [ТС]     Отладчик VS показывает разные значения #6
Если ты думаешь, что ссылка на ту статью - это ерунда, то это совершенно напрасно. Советую максимально внимательно прочитать и осмыслить.
Добавил цикл и стала накапливаться ошибка. Читай статью, короче.
Пфф... Я её и прочитал. По этому и сделал такой вывод. Ещё, прогнав через отладчик, увидел, что без цикла погрешности ВООБЩЕ нету. ВООБЩЕ. А ноль в цикле накапливаться не может.

Добавлено через 2 минуты
Вообще, не хочу называть себя учёным, но я с Ассемблером дело имел около года, и прекрасно знаю представление данных. Я же сказал, что погрешность заподозрил сразу, но потом её отсеял.
DrOffset
6913 / 4106 / 935
Регистрация: 30.01.2014
Сообщений: 6,904
28.04.2014, 20:43     Отладчик VS показывает разные значения #7
WinRar007, Ну что тут скажешь - дело хозяйское
Что-то про твой код утверждать без полного анализа я не могу. Поэтому, собственно, раз такой ответ и предложение разобраться не устраивают, то ничем более помочь не смогу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 20:45     Отладчик VS показывает разные значения
Еще ссылки по теме:
Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран C++
C++ Как сделать так, чтобы функция rand() возвращала разные значения
C++ Сделать программу которая будет записывать разные значения в переменную типа integer
На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? C++
Как несколько раз использовать метод добавления элементов в массивы, если все значения разные C++

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

Или воспользуйтесь поиском по форуму:
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:45  [ТС]     Отладчик VS показывает разные значения #8
Что-то про твой код утверждать без полного анализа я не могу. Поэтому, собственно, раз такой ответ и предложение разобраться не устраивают, то ничем более помочь не смогу.
Спасибо за всё, сам уже разобрался. Начал отладку в режиме релиза. Мой трэш...
Yandex
Объявления
28.04.2014, 20:45     Отладчик VS показывает разные значения
Ответ Создать тему
Опции темы

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