Как найти абсолютное значение в матрице в C?

#arrays #c #matrix

#массивы #c #матрица

Вопрос:

Я выполняю программу на языке Си для решения системы линейных уравнений методом итераций с фиксированной точкой. И я должен проверить, является ли основная матрица доминирующей по диагонали. Но когда я ввожу abs и элемент матрицы, он говорит

Ошибка (активная) E0308 более одного экземпляра перегруженной функции «abs» соответствует списку аргументов.

  • Как я могу это исправить?
 //for every row  for (i = 0; i lt; size; i  )  {  //for every column finds the sum of the row  double sum = 0;  for (j = 0; j lt; size; j  )  sum  = abs(k[i][j]);  sum -= abs(k[i][i]);  //check  if (abs(k[i][i]) lt; sum) {  printf("The matrix is not diagonally dominant.");  }  }  

Комментарии:

1. Что это за тип k ? Полное сообщение об ошибке должно показать вам кандидатов на функции, вызывающих неоднозначность. Вы действительно используете компилятор C для этой программы на C? В C правильная функция такова fabs . Кроме того, в C нет такого понятия, как перегруженные функции.

2. С компилятором C у вас может возникнуть неоднозначность с функцией C abs , которая работает с целыми числами, и функцией стандартной библиотеки C std::abs , которая имеет перегрузки для целых чисел и типов с плавающей запятой. Если вы смешиваете код C и C и выполняете другие действия, такие как импорт всего std пространства имен, имейте в виду, что это может вызвать проблемы, поразительно похожие на то, что вы описываете.

3. Вау, большое спасибо! Я действительно не знал, что фабс прав. Я только что видел функцию abs() в библиотеке lt;math.hgt;. Спасибо вам : )

Ответ №1:

int abs(int) это для int .

Используйте double fabs(double) с double s.