Ошибка при получении матрицы идентичности после выполнения матричного умножения между матрицей и ее обратной

Используя CUBLAS, я выполнил матричную инверсию матрицы N x N, содержащей случайные значения с плавающей запятой (одинарной точности) до 6 знаков после запятой. После получения обратной матрицы (и проверки с помощью этого веб-сайта) я умножил полученную обратную матрицу и исходная матрица (с использованием программы умножения матриц CUDA) в надежде получить точную матрицу идентичности. Но в матрице идентичности была ошибка. Не могли бы вы объяснить мне, почему это произошло? Я даже прилагаю вывод моей программы ниже.

15x15 matirx матрица 3x3


person pradyot    schedule 13.06.2016    source источник


Ответы (1)


То, что вы видите, является числовой ошибкой. Это распространено из-за конечной точности вычислений. Вы можете начать отсюда.

https://en.m.wikipedia.org/wiki/Numerical_error

person kangshiyin    schedule 13.06.2016
comment
Нет, и на самом деле иногда невозможно точно представить число с типом float/double на компьютере. Например, "0,1" - person kangshiyin; 13.06.2016
comment
Ничего, если я отправлю программу вместе с возможными ошибками (такими как эта) в свое руководство? Поскольку метод проверки (матрица идентичности) не является точным на 100%. - person pradyot; 13.06.2016
comment
Отлично. Стандартный способ проверки результата числа с плавающей запятой — «приблизительно равен» с предопределенной допустимой ошибкой, такой как 1e-4. - person kangshiyin; 13.06.2016