Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
1

Что за значение?

18.03.2009, 23:09. Просмотров 895. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2009, 23:09
Ответы с готовыми решениями:

Каксделать что бы переменная могла принимать значение типа real и значение nil?
Допустим есть функция : function kvkor(a:real; b:real) :real; begin If a = nil then Begin ......

Проверить, что в первой ячейке массива лежит то же значение, что и в остальных
координатные переменные и функции обьявлены. нужно проверить ячейки массива, что в первой...

Конвертер величин: Что нужно делать в методе ConvertBack что бы возвращать и редактировать значение
Форумчане помогите разобраться все перерыл не могу догнать(( Что нужно делать в методе ConvertBack...

Получить значение ячейки, зная, что у другой ячейки в этой строке - максимальное значение
Да, может заголовок не очень, но я не знаю как лучше вкратце описать проблему. В общем, у меня...

8
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
Вложения
Тип файла: rar matem.rar (1.5 Кб, 22 просмотров)
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2009, 14:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Объект TDictionary. Что такое ключ и что такое значение?
Из прочитанного в гугле понял что это нечто наподобие какого-то словаря: Коллекция пар...

Что значит возвращать значение
Функция возвращает значение; функция удаляет, но не возвращает значения; Функция не возвращает...

Узнать что значение максимально
Здравствуйте ! У меня в таблице несколько полей, каким образом можно узнать что значение всех...

Что такое векторное значение?
Подскажите, пожалуйста, что такое векторное значение. Встретил в Шилов, Функции нескольких...


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

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

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