【发布时间】:2014-02-15 09:45:07
【问题描述】:
我正在使用 Heron 公式求三角形的面积。给定边 a、b 和 c、A = √(s(s-a)(s-b)(s-c)),其中 s 是半周长 (a+b+c)/2。这个公式应该可以完美运行,但我注意到 Math.pow() 和 Math.sqrt() 给出不同的结果。为什么会发生这种情况,我该如何解决?
我写了两个方法来查找区域并确定它是否为整数。
在第一种方法中,我取平方根,然后将它们相乘:
public static boolean isAreaIntegral(long a, long b, long c)
{
double s = (a+b+c)/2.0;
double area = Math.sqrt(s)*Math.sqrt(s-a)*Math.sqrt(s-b)*Math.sqrt(s-c);
return area%1.0==0.0 && area > 0.0;
}
在第二种方法中,我找到产品然后取平方根:
public static boolean isAreaIntegral(long a, long b, long c)
{
double s = (a+b+c)/2.0;
double area = Math.pow(s*(s-a)*(s-b)*(s-c),0.5);
return area%1.0==0.0 && area > 0.0;
}
谁能解释为什么这两种在数学上等价的方法给出不同的值?我正在处理Project Euler Problem 94。我的答案是999990060 第一种方式和996784416 第二种方式。 (我知道这两个答案都与实际相差甚远)
【问题讨论】:
-
a、b、c的值是多少? -
你真的比较过
sqrt(s*(s-a)*(s-b)*(s-c)和pow(...,0.5)吗?无论如何,没有更简单的公式来计算2*(A/2*B)形式的面积...