我在“Crack the Coding Interview”一书中遇到了这个问题。
给定笛卡尔平面上的两条线,确定两条线是否相交。
这是解决方案:
public class Line {
static double epsilon = 0.000001;
public double slope;
public double yintercept;
public Line(double s, double y) {
slope = s;
yintercept = y;
}
public boolean intersect(Line line2) {
return Math.abs(slope - line2.slope) > epsilon ||
Math.abs(yintercept - line2.yintercept) < epsilon;
}
}
为什么它没有简单的解决方案,如果斜率不同,那么它们将相交。为什么 epsilon 和 y 截距。
在建议中它说
不要假设斜率和 y 截距是整数。了解浮点表示的局限性。永远不要检查与 的相等性
==
。