gpt4 book ai didi

java - Java中使用double计算截锥体侧面时如何处理浮点精度

转载 作者:行者123 更新时间:2023-12-02 01:25:25 26 4
gpt4 key购买 nike

我正在尝试使用下面的代码计算截头圆锥体的侧面。

输入:2 个节点,包含 x、y、z 值(绝对位置)和半径(位置半径),全部为 double

到目前为止我在做什么:
1.计算截头圆锥体的长度
2.计算截锥体的侧面积

我的问题:
假设,由于精度损失,两个大小相似的 float 相减是有问题的。 (我没有遇到这个问题)

我的问题:
我可以做什么来改善最终结果?

我发现/想到的可能性:
- 使用 BigDecimal (我不想这样做,因为运行时间较长)
- 用 r1^2 替换 (r1-r2)*(r1-r2) - 2*r1*r2 + r2^2
- 检查两个 double 值的接近程度,如果非常接近则假定它们的差值为 0。这是否会提高最终结果的准确性?减法的结果不是比假设的0的绝对误差小吗?

public static double calculateLateralSurface(Node node1, Node node2) {
double x, y, z, length, r1, r2, lateralSurface;

// calculate length of frustum cone
x = node1.getPosX() - node2.getPosX();
y = node1.getPosY() - node2.getPosY();
z = node1.getPosZ() - node2.getPosZ();
length = Math.sqrt(x * x + y * y + z * z);
r1 = node1.getRadius();
r2 = node2.getRadius();

// calculate lateral surface of frustum cone
lateralSurface = (r1+r2)*Math.PI*Math.sqrt((r1-r2)*(r1-r2)+length*length);
return lateralSurface;
}

我希望有人能帮助我:)

最佳答案

double 对于任何实际甚至不太实际的用途都具有足够的精度。因此,除非您的锥体描述了从地球一直到半人马座阿尔法星的光学望远镜的视场,否则您不应该遇到任何精度问题。

我可以向您指出,您正在计算长度,方法是取平方根,然后在使用它之前再次平方,因此消除不必要的计算对可能会以某种方式改善情况,但我怀疑这是你的问题。

因此,如果您的结果看起来不正确,那么可能是错误造成的,而不是 double 的精度。

无论如何,您为什么不提供一个独立的、可编译的示例,以及实际的输入值、实际的输出值以及您的期望值,我们可以更深入地研究它。

关于java - Java中使用double计算截锥体侧面时如何处理浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57026728/

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