Операция -1.0 / 1.0 возвращает 0? - PullRequest
2 голосов
/ 07 июля 2011

Я пишу программу, которая решает матрицы методом Гаусса-Джордана. Все работает кроме -1.0 / 1.0. При печати матрицы она печатает 0.0, когда оно должно быть -1.0. Кто-нибудь может объяснить, почему это происходит? В приведенном ниже случае матрица [k] [s] равна -1,0, а делитель - двойное значение 1,0.

for(s = 0; s < (n+1); s++){ //Augmented matrix, while s < number of columns

                    if(divisor == 0.0){ //Not dividing by 0.0
                            continue;
                    }

                    matrix[k][s] = matrix[k][s] / divisor;

                    if((matrix[k][s] < TOLERANCE) || (matrix[k][s] < -TOLERANCE)){ //To avoid -0.0 values, TOLERANCE == 1e6
                            matrix[k][s] = 0.0;
                    }

Ответы [ 4 ]

6 голосов
/ 07 июля 2011

Я предполагаю, что вы хотели это условие:

(matrix[k][s] < TOLERANCE) || (matrix[k][s] < -TOLERANCE)

быть таким:

(matrix[k][s] < TOLERANCE) && (matrix[k][s] > -TOLERANCE)

Другими словами, когда abs(matrix[k][s]) < TOLERANCE

2 голосов
/ 07 июля 2011

|| должно быть &&?

if (fabs(matrix[k][s]) < TOLERANCE)

Изменить ref Jon's answer;abs(matrix[k][s]) < TOLERANCE является правильным решением ..

1 голос
/ 07 июля 2011
if ((matrix[k][s] < TOLERANCE) || (matrix[k][s] < -TOLERANCE))

не делает то, что вы хотите.В частности, если matrix[k][s] равно -1.0, это условие выполняется.Вместо этого вы хотите:

if (fabs(matrix[k][s]) < TOLERANCE)
0 голосов
/ 07 июля 2011

Я вижу несколько вопросов:

  1. Разве этот код не будет устанавливать все от -infinity .. TOLERANCE до 0? Это не может быть тем, что вы хотите.

  2. Разве TOLERANCE не должно быть очень маленьким числом?

  3. Действительно ли необходимо сравнение с 0.0? На современных процессорах деление на 0 должно производить бесконечность, а не - исключение.

  4. Возможно, вы захотите написать деление как matrix[k][s] /= divisor;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...