42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
1 | |
Что за значение?18.03.2009, 23:09. Показов 1096. Ответов 8
Метки нет Все метки)
(
Привет, в общем накатал прогу для решения задач по математике, работала правильно все как надо выводила. Но сейчас вот начал делать контрольную и на мой вариант попался баг. Программа продолжает все правильно выводить но в 1 случае вместо 0 выводит 8.8е-016.
Программа решает задачи Жордана-Гаусса. В общем на последней итерации этот клюк выявился. И что самое ужасное числа все верные! Я и через дебагер смотрел и выводил все что можно. Вот участок кода Код
double tmp = ((fields[ci][j] * fields[i][cj]) / fields[ci][cj]); fields2[i][j] = (double)fields[i][j] - (double)tmp;//((fields[ci][j] * fields[i][cj]) / fields[ci][cj]); if( i == 2 && j == 4) { cout<<fields[i][j]<<" "<<tmp<<" "<<fields[i][j]-tmp<<endl; } //cout<<"filelds[i][j]"<<fields[i][j]<<endl; // cout<<fields[ci][j] * fields[i][cj]<<endl; // cout<<(fields[ci][j] * fields[i][cj]) / fields[ci][cj]<<endl; // cout<<fields[i][j] -((fields[ci][j] * fields[i][cj]) / fields[ci][cj])<<endl; // cout<<fields[i][j]<<"-(("<<fields[ci][j]<<"*"<<fields[i][cj]<<") /"<<fields[ci][cj]<<")="<<fields2[i][j]<<endl; } -4 -4 8.8е-016 -4((-4*1)\1)=8.8е-016 даже просто если посчитать отдельно значения fields[i][j] = -4 double tmp = ((fields[ci][j] * fields[i][cj]) / fields[ci][cj]); = -4 и fields[i][j]-tmp = 8.8е-016 Что оно не может преобразовать, что за дела? Массив типа double. Что самое веселое, мой друг сделал такую же программу но своими силами, тоесть у нас 2 разные программы выполняющие одну задачу, но когда он ввел эти данные у себя у него в том месте вывело -2.384e-007 Это что компилятор тупил или как?
0
|
|
18.03.2009, 23:09 | |
Ответы с готовыми решениями:
8
Каксделать что бы переменная могла принимать значение типа real и значение nil? Проверить, что в первой ячейке массива лежит то же значение, что и в остальных Конвертер величин: Что нужно делать в методе ConvertBack что бы возвращать и редактировать значение
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
|
18.03.2009, 23:15 | 2 |
перепроверь иттерации может где то за пределы массива вылазит, вот и ставит тебе числа странные, а вообще толку с того участка проги что ты сюды сунул 0, тут тока вывод, а он скорее всего верный
0
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
18.03.2009, 23:26 [ТС] | 3 |
Стоит проверка
Код
if( i == 2 && j == 4) fields[2][4] то выведит 8.8e-016 тоесть тут все норм в пределах. Потом я уже написал что выводил все данные со всех переменных в них все как надо.
0
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
|
18.03.2009, 23:33 | 4 |
не факт ты напиши на вывод fields[2][100] он тебе тож число какое нибудь выведет
Добавлено через 1 минуту 3 секунды мне очень сильно кажеца что ты за пределы массива вылазишь, тем более раз иттерация последняя криво пашет
0
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
18.03.2009, 23:42 [ТС] | 5 |
массив 4х6
и я вывожу 2 4 не думаю что я за пределами. И тем более другие варианты работают, как надо с тем же кол-вом итераций. В общем вот код гляньте.
0
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
|
18.03.2009, 23:54 | 6 |
да не маленький код, седня точно разобраца не успею...
0
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
18.03.2009, 23:57 [ТС] | 7 |
Я склоняюсь к ошибки компилятора или преобразования. Не может же быть, что другие числа считает нормально а тут бред выводит. При том что если по отдельности все выводить то все правильно.
0
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
|
19.03.2009, 10:29 | 8 |
может быть и компилятор тупит, но перепроверить все равно надо, у меня случай был похожий я ошибку искал долго: с числом какие-то операции выполнял которые его явно к 0 не приравнят, а он мне упорно 0 рисовал, после перезагрузки компа прога чудом заработала
Добавлено через 10 часов 23 минуты 9 секунд чето по-моему всеп таки где-то в коде ошибка, но если вам сильно кажеца, что это ошибка компилятора, попробуйте сменить компилер и затестить
0
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
19.03.2009, 14:59 [ТС] | 9 |
Ну а что за злостное совпадение, что у друга в том же месте ошибка, а код разный.
0
|
19.03.2009, 14:59 | |
Помогаю со студенческими работами здесь
9
Объект TDictionary. Что такое ключ и что такое значение?
Узнать что значение максимально
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |