要求是检查2D平面中的特定点是否通过特定线。
给出的2个初始点是(3,1)
和(12, 3)
。
线的斜率可以计算为
(y2-y1) / (x2-x1)
然后可以用y = mx + c
构造线的方程
其中,m是斜率,c是常数。
表示直线的方程式为2x + 3 = 9y
因此,要检查以上行是否通过坐标(-6, -1)
,我们只需检查一下
2x + 3 = 9y
2x + 3 = 2(-6) + 3 = -12 + 3 = -9 = 9(-1) -> true
这在处理笔和纸时很容易。
但是,当斜率计算为(3-1)/(12-3)= 2/9时,java的精度会丢失
使用Bigdecimal时,在计算斜率时会出现异常
java.lang.ArithmeticException:不结束的十进制扩展;没有精确的可表示的十进制结果。
并且加倍
double slope = (double)(3-1)/(double)(12-3); //0.2222222222222222
// Putting (3,1) to get c
double c = (double)(1) - (double)(slope * 3); //0.33333333333333337
Hence the equation of the line is y = 0.2222222222222222(x) + 0.33333333333333337
// to check whether (-6, -1) passes through the above line, put the x coordinate
double yCoordinate = 0.2222222222222222* (-6) + 0.33333333333333337;
yCoordinate显示为-0.9999999999999999
,而不是-1
。因此,结果是错误的,但由简单数学计算得出的答案是正确的。如何获得预期的结果?
答案 0 :(得分:0)
这足够接近给出确切的值,但不是正确的方法
public double getExactValueDiv(double a,double b){
double tmp = a/b;
tmp=Math.round(tmp*1000000000)/1000000000
return tmp;
}