c - -1.0/1.0 操作返回 0?

标签 c

我正在编写一个程序,通过 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/

相关文章:

c - Windows 上 C 中重命名函数的权限被拒绝

c - 带符号的位域至少需要两位

C++:初始化在头文件中声明的模板构造函数/例程?

无法通过邮槽发送 wchar_t 数组

c - 为什么使用 write() 将日期写入磁盘会阻塞 SIGALRM 信号,直到写入完成?

c - 如何在没有内核源代码树的情况下构建外部内核模块

c - APUE : Createing a file with a hole in it: Figure 3. 2 第 65 页

CS50 Speller,通过测试,但 check50 问题,使用未初始化的值

将 x86 程序集跳转表转换为 C

c - 在 C 中处理数组嵌套结构的最佳方法