我正在编写一个程序,通过 Gauss-Jordan 方法求解矩阵。除 -1.0/1.0 外,一切正常。打印矩阵时,当它应该仍然是 -1.0 时,它会打印出 0.0。谁能解释为什么会这样?在下面的例子中,matrix[k][s] 是 -1.0,除数是 1.0 double 值。
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;
}
最佳答案
我猜你想要这个条件:
(matrix[k][s] < TOLERANCE) || (matrix[k][s] < -TOLERANCE)
是这样的:
(matrix[k][s] < TOLERANCE) && (matrix[k][s] > -TOLERANCE)
换句话说,当fabs(matrix[k][s]) < TOLERANCE
(注意解释其他答案中的评论 - 我最初使用 abs
,但 fabs
是这里的正确功能。)
关于c - -1.0/1.0 操作返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602574/