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

C++

Войти
Регистрация
Восстановить пароль
 
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
#1

Что за значение? - C++

18.03.2009, 23:09. Просмотров 677. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2009, 23:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что за значение? (C++):

Мусорное значение в динамическом массиве в структуре. Что я делаю не так? - C++
Здравствуйте! Делаю вычисление факториала от 21 до 30. Использую длинную арифметику. Произведение длинного и короткого чисел -...

Запуск процесса что лучше? что быстрее? что надежнее? Winexec CreateProcess ShellExecute - C++ WinAPI
Здравствуйте , какую функцию лучше использовать для программного запуска процесса winexec CreateProcess ShellExecute ? В чем...

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

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

Возвращаемое значение. Что именно происходит? - C++
Имеется код класса &quot;Массив&quot;. Реализованы конструктор копии, деструктор, перегрузка операции присваивания и сложение массивов...

Как сделать что бы находило наибольшое значение? - C++
Как сделать что бы находило наибольшое значение? То есть пользователь пишет a b c три числа и из них показывало наибольшее? В консоле...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
18.03.2009, 23:15 #2
перепроверь иттерации может где то за пределы массива вылазит, вот и ставит тебе числа странные, а вообще толку с того участка проги что ты сюды сунул 0, тут тока вывод, а он скорее всего верный
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
18.03.2009, 23:26  [ТС] #3
Стоит проверка
Код
if( i == 2 && j == 4)
если дальше в коде печатать
fields[2][4] то выведит 8.8e-016
тоесть тут все норм в пределах.
Потом я уже написал что выводил все данные со всех переменных в них все как надо.
0
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
18.03.2009, 23:33 #4
не факт ты напиши на вывод fields[2][100] он тебе тож число какое нибудь выведет

Добавлено через 1 минуту 3 секунды
мне очень сильно кажеца что ты за пределы массива вылазишь, тем более раз иттерация последняя криво пашет
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
18.03.2009, 23:42  [ТС] #5
массив 4х6
и я вывожу 2 4 не думаю что я за пределами.
И тем более другие варианты работают, как надо с тем же кол-вом итераций.
В общем вот код гляньте.
0
Вложения
Тип файла: rar matem.rar (1.5 Кб, 21 просмотров)
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
18.03.2009, 23:54 #6
да не маленький код, седня точно разобраца не успею...
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
18.03.2009, 23:57  [ТС] #7
Я склоняюсь к ошибки компилятора или преобразования. Не может же быть, что другие числа считает нормально а тут бред выводит. При том что если по отдельности все выводить то все правильно.
0
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
19.03.2009, 10:29 #8
может быть и компилятор тупит, но перепроверить все равно надо, у меня случай был похожий я ошибку искал долго: с числом какие-то операции выполнял которые его явно к 0 не приравнят, а он мне упорно 0 рисовал, после перезагрузки компа прога чудом заработала

Добавлено через 10 часов 23 минуты 9 секунд
чето по-моему всеп таки где-то в коде ошибка, но если вам сильно кажеца, что это ошибка компилятора, попробуйте сменить компилер и затестить
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
19.03.2009, 14:59  [ТС] #9
Ну а что за злостное совпадение, что у друга в том же месте ошибка, а код разный.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2009, 14:59
Привет! Вот еще темы с ответами:

Что определяет числовое значение в квадратных скобках? - C++
Что определяет числовое значение в квадратных скобках? char buffer

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.03.2009, 14:59
Ответ Создать тему
Опции темы

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