• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Арифметические Операции С Элементами Массива

  • Автор темы Zerkal0
  • Дата начала
Z

Zerkal0

Добрый день!
Никак не могу сообразить, почему получается следующий результат

Код:
#include<iostream>


using namespace std;
int main()
{



double a[M][N] = { 
{2.9,5.6,8.9,6.3,1.7,2.0,0.5,1.0,9.3},
{-0.4,4.3,5.0,1.2,1.8,-0.8,2.7,0.6,5.1},
{-1.0,-0.9,5.8,1.5,2.5,0.8,3.8,9.2,2.0},
{0.6,3.4,7.4,13.2,7.3,10.1,12.3,10.6,14.0},
{-1.0,-4.3,-4.7,-3.2,7.7,5.4,1.7,7.6,1.4},
{-0.7,-3.4,-1.1,-3.4,-4.5,0.8,1.5,3.4,-6.5},
{-1.4,-2.0,-2.1,-6.3,-2.2,-3.0,1.7,8.8,1.6},
{-1.2,-3.9,-2.8,-6.4,-0.5,-1.3,-1.1,13.6,3.3}	
};

double x = (a[1][0]/a[0][0]) * a[0][0];
cout << a[1][0] - (a[1][0]/a[0][0]) * a[0][0];


return 0;
}


Должно выводить 0, а выдаёт какой-то невразумительный ответ -5.55112e-017

Подскажите пожалуйста, что не так?
 
R

rrrFer

Ну потому что -5.55112e-017 - это очень маленькое число, это и есть ноль (т.н. машинный ноль).
Но у вас же дробные числа, да еще двойной точности. "0", который вы хотите получить - это целое число.
Дак вот в компутере возникают погрешности при вычислениях и вот эти погрешности вы и получили себе на экран ( -5.55112e-017)
 
Z

Zerkal0

спасибо за ответ)

хм...а можно как-то всё таки 0 получить? Может используя библиотеку какую?

Вроде элементарная задача - отнять два равных числа друг из друга и получить ноль.

Такой результат мне надо получить в рамках задачи разработки алгоритма метода исключения Гаусса (решение системы линейн уравненний).
Т.е нужно будет умножать первую строку матрицы на коэффициент и вычитать полученную строку из других строк.
 
R

rrrFer

ну можно использовать нечеткое вравнение (такая функция есть в некоторых библиотеках)

Код:
bool fuzzycompare(const double &a, const double &b) {
return fabs(a - b) < 0.000001;
}

ну как-то так.

Вроде элементарная задача - отнять два равных числа друг из друга и получить ноль.
Задача элементарная, но в компутере нет равных дробных чисел.
Грубо говоря,
a = 1, b = 1

1.0000000000000000000001
и
1.00000000000000000000001
или
0.999999999999999999999999
Вот такие вот дела.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!