gpt4 book ai didi

java - 对于大值,Math.pow 和 Math.sqrt 的工作方式不同吗?

转载 作者:行者123 更新时间:2023-12-01 23:11:59 27 4
gpt4 key购买 nike

我正在使用海伦公式来计算三角形的面积。给定边abcA = √(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。 (我知道这两个答案都与实际情况相差甚远)

最佳答案

我肯定会投票支持“舍入问题”,因为与第二个方法中的单个方法调用(仅舍入一次)相比,您将第一个方法中的多个方法调用的结果(每个方法结果都进行舍入)相乘.

关于java - 对于大值,Math.pow 和 Math.sqrt 的工作方式不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21791961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com