Если вы собираетесь делать матричные вычисления, используйте LAPACK. Это очень хорошо проверенный код. Очень умные люди работали над этим десятилетиями. Они глубоко задумывались о проблемах, о которых непосвященные никогда не подумают.
В общем, я бы рекомендовал два вида тестирования: систематическое и случайное. Под систематическим я подразумеваю изучение крайних случаев и т. Д. Это помогает, если вы можете прочитать исходный код. Часто алгоритмы имеют точки ветвления: рассчитайте этот путь для чисел в этом диапазоне, другой способ для чисел в другом диапазоне и т. Д. Проверьте значения, близкие к точкам ветвления с обеих сторон, потому что именно здесь ошибка аппроксимации часто является наибольшей.
Случайные входные значения тоже важны. Если вы рационально выберете все контрольные примеры, вы можете систематически избегать того, что, по вашему мнению, не является проблемой. Иногда вы можете эффективно использовать случайные входные значения, даже если у вас нет точных значений для проверки. Например, если у вас есть код для вычисления функции и ее инверсии, вы можете сгенерировать 1000 случайных значений и посмотреть, вернет ли вас применение функции и ее инверсии к тому, с чего вы начали.