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

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

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

Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран C++
C++ Где ошибка? выдает разные значения
C++ Как сделать так, чтобы функция rand() возвращала разные значения
C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,536
28.04.2014, 18:40     Отладчик VS показывает разные значения #2
По картинкам ничего не ясно. Может у них разная область видимости.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,593
28.04.2014, 18:40     Отладчик VS показывает разные значения #3
WinRar007, Не очень ясно что там за код у тебя, но операции с плавающей точкой в принципе "погрешны". Вот достаточно неплохой пост на эту тему.
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
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,593
28.04.2014, 20:27     Отладчик VS показывает разные значения #5
Цитата Сообщение от WinRar007 Посмотреть сообщение
Я, если честно, уже начинаю сомневаться, что это конкретно от моего алгоритма, ведь там нет ничего сложного
Если ты думаешь, что ссылка на ту статью - это ерунда, то это совершенно напрасно. Советую максимально внимательно прочитать и осмыслить.
Добавил цикл и стала накапливаться ошибка. Читай статью, короче.
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
28.04.2014, 20:35  [ТС]     Отладчик VS показывает разные значения #6
Если ты думаешь, что ссылка на ту статью - это ерунда, то это совершенно напрасно. Советую максимально внимательно прочитать и осмыслить.
Добавил цикл и стала накапливаться ошибка. Читай статью, короче.
Пфф... Я её и прочитал. По этому и сделал такой вывод. Ещё, прогнав через отладчик, увидел, что без цикла погрешности ВООБЩЕ нету. ВООБЩЕ. А ноль в цикле накапливаться не может.

Добавлено через 2 минуты
Вообще, не хочу называть себя учёным, но я с Ассемблером дело имел около года, и прекрасно знаю представление данных. Я же сказал, что погрешность заподозрил сразу, но потом её отсеял.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,593
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++
C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран

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

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

Текущее время: 09:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru