【发布时间】:2012-11-05 13:52:51
【问题描述】:
我在“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 截距是整数。了解浮点表示的局限性。永远不要检查
==是否相等。
【问题讨论】:
-
你了解测试两个浮点数是否相等的问题吗?
-
@Beta 我也可以在那里使用一些帮助。谢谢
-
这正是我在大多数情况下讨厌浮点数据类型的原因。如果我要阅读该问题,我会假设斜率和截距是实际数字,而不是浮点表示。 java中有一个
BigDecimal类型,它没有浮点问题——我敢肯定它运行计算比double慢得多,但至少你不会有epsilon废话来处理。跨度>
标签: java math floating-point