c – 可以在典型的项目中安全使用数学吗?

在回答一个我建议的问题 – 数学时,一则评论指出这是危险的.

我个人的感觉是外界的科学计算,可以.我也认为,严重的金融应用程序使用固定点而不是浮点数.

当然,如果你想在你的项目中使用它,最终的答案就是对你的项目进行测试,看看它影响了多少.但是,我认为一般答案可以由尝试并具有这种优化经验的人给出:

可以将ffast数学安全地用于正常的项目?

鉴于IEEE 754浮点数有四舍五入错误,假设您已经有不精确的计算.

This answer特别关注的事实是,非常数学的做法不仅仅是重新排序操作,导致结果略有不同(不检查NaN或零,禁用有符号的零仅仅举几个例子),但是我看不到这些影响最终将在真正的代码中.

我试图想到浮点的典型用法,这就是我想出来的:

> GUI(2D,3D,物理引擎,动画)
>自动化(例如汽车电子)
>机器人
>工业测量(例如电压)

和学校项目,但这些在这里并不重要.

解决方法

它所做的特别危险的事情之一就是意味着无限数学,这允许显式的NaN测试假装没有NaNs存在.对于明确处理NaN的任何代码来说,这是个坏消息.它会尝试测试NaN,但测试将通过它的牙齿,并声称没有什么是NaN,即使是.

这可以得到非常明显的结果,例如,NaN在以前在某些时候被过滤掉时会让用户冒泡.那当然不好,但是你可能会注意到并修复它.

当NaN检查在那里进行错误检查时,会出现一个更为阴险的问题,因为真的不应该是NaN.但是,也许通过一些bug,糟糕的数据,或者通过其他非常数学的影响,NaN无论如何也是NaN.现在你没有检查它,因为假设没有任何东西是NaN,所以isnan是虚构的同义词.事情会发生错误,在您已经运送软件后发生错误,很长时间,您将收到一个“不可能”的错误报告 – 您确实检查了NaN,它在代码中是正确的,它不能失败!但是,因为有人有一天在标记添加了数学数学,也许你甚至自己做了,不知道它会做什么,或者忘记了你使用NaN检查.

那么我们可能会问,是正常吗?这是相当主观的,但我不会说,检查NaN是特别异常.完全循环并断言这是不正常的,因为 – 数学打破它可能是一个坏主意.

它也做了很多其他可怕的事情,在其他答案中详细说明.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...