首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理舍入错误的正确方法是什么?

处理舍入错误的正确方法是什么?
EN

Software Engineering用户
提问于 2019-08-24 21:05:44
回答 1查看 1.4K关注 0票数 1

我目前正在C++的物理引擎上工作。物理引擎是用来玩沙箱游戏的。我想要建立一个强大的物理引擎,因此,它需要非常精确。

我编写了以下函数:

代码语言:javascript
复制
Vector3D* rotationX(double theta);

这个函数将在θ度处围绕x轴旋转一个矢量。我的测试试图将向量<0,1,0>旋转到x轴上,这应该是向量<0,0,1>。输出是以下向量,非常接近于它应该是什么:<0,0.000796327,1>。

我知道地板函数,但我认为这还不够精确,因为我的三维向量类应该能够处理实数;也就是说,不仅仅是整数。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2019-08-24 21:48:03

您基本上有以下选项:

1.)什么都不做。也许结果对于您的用例来说是足够精确的。注意:当使用浮点操作时,您必须处理一些舍入错误,这是非常正常的。我建议您看看关于浮点算法,每个计算机科学家应该知道什么?

2.)如果用例涉及比较两个向量是否相等,请确保与某些" epsilon“进行比较,其中epsilon约为10^(-3)。

3.)找出为什么结果如此不精确。使用64位双精度的标准三角函数的旋转通常会使结果比10^(-10)更精确。

在此期间,很明显(请参阅注释),在这种情况下,根本原因是使用3.14作为皮派的近似。当这些标准值在所使用的环境中可用时,使用预定义的常量通常是个好主意。例如,在C++中,可以使用来自<math.h>的常量M_PI (参见这是如此的帖子)。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/396443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档