作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用下面的代码计算截头圆锥体的侧面。
输入: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/
我是一名优秀的程序员,十分优秀!