2014-12-18 2 views
0

Я работаю над проектом C++ для выполнения некоторых вычислений. Я использую библиотеку boost для выполнения этих вычислений. У меня была странная ошибка (результаты были неправильными или программа зависала). Когда я проверил, что происходит, я понял, что после создания матрицы двойников и умножения матрицы на 0 (чтобы убедиться, что все равно нулю, например:Умножение матрицы на скалярный нуль

matrix<double> *A=new matrix<double>(10,100); 
(*A)*=0.0; 

Моя матрица не была всегда заполнена строги 0 (это внутри метода, который называется LOT, указатель удален правильно, и я проверил, что у меня нет утечек памяти), иногда отрицательные нули (-0.0) или даже NaNs! Тогда я понял, что использование метода clear() будет устанавливать все значения по умолчанию (что равно 0 для double). Так что даже если у меня есть решение, это очень странно! Как обычно, вопрос: сделал ли я что-то неправильно (скорее) или есть ли ошибка в библиотеке (менее вероятно)?

PS: Я использовать компилятор Intel (версия 2015)

+0

Вы просто создать матрицу, вы не инициализирующий его содержание. Инициализируйте это сначала с некоторыми значениями, а затем выполните операции над ним. – madduci

ответ

0

Как указано в Boost Libraries,

matrix (size_type size1, size_type size2): Allocates an uninitialized matrix that holds size1 rows of size2 elements. 

Таким образом, вы используете матрицу не инициализирован, в результате чего эти странные ошибки. Создать первую нулевую матрицу или единичную матрицу:

identity_matrix<double> matrix(3); //create a 3x3 identity matrix 
zero_matrix<double> matrix(3, 3); //create a 3x3 zero matrix 
+0

Целью умножения было инициализировать матрицу посредством умножения на 0. По-видимому, с помощью метода clear будет инициализироваться и установить каждый элемент в 0. Спасибо за ответ ... – user1273813

+0

вместо clear(), используйте zero_matrix @ user1273813 – madduci

Смежные вопросы