Leetcode 可能挑战:检查它是否是一条直线

Leetcode May Challenge : Check If It Is a Straight Line

这是我的问题代码:检查它是否是一条直线

 bool checkStraightLine(vector<vector<int>>& a) {
        double m = (((double)a[1][1]-a[0][1])/(a[1][0]-a[0][0]));

        for(int i=1;i<a.size()-1;i++)
        {

                double slope=(((double)a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));

                if( m!=slope)
                    return false;
        }
        return true;
    }

我的疑问是为什么我的代码在替换时会产生错误:

double m = (((double)a[1][1]-a[0][1])/(a[1][0]-a[0][0]));

double m = (double)((a[1][1]-a[0][1])/(a[1][0]-a[0][0]));

double slope=(((double)a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));

double slope=(double)((a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));

鉴于:

int a = 1 , b = 2;

这行代码:

double d = (double)(a/b);  // d is 0.

相同:

double d = ((double)a/b);  // d is 0.5

在第一种情况下,您在转换结果之前进行整数除法。

在第二种情况下,您将分子转换为 double,然后 然后 除法,即进行浮点除法。

在你的例子中,错误可能是因为代码期望一个非零斜率,但整数除法给你一个零。

注意这个对比:

 if( m!=slope)

存在根本性缺陷。您永远不应该比较浮点数是否相等。改为使用阈值进行比较。