使用IEEE 754浮动指针编号的经验法则?

时间:2015-06-19 11:38:45

标签: floating-point

软件工程师通常会直接阅读文章“What Every Computer Scientist Must Know About Floating Point Arithmetic'当他们想要了解更多浮点运算时。但是,这篇文章太长了,需要付出很多努力来提取文章的要点。所以我想知道是否有任何'经验法则。在进行浮点运算时可以记住,以便最大限度地减少浮点误差?

2 个答案:

答案 0 :(得分:2)

除了Peter制作的那些之外,我建议您尝试了解您的语言是否以及何时使用中间精度:通常这是由于在硬件级别使用80位浮点数而产生的,并且根据何时将结果舍入到目标精度(32位或64位),可能会出现不同的行为。

这在解释语言(例如Python,JavaScript)中通常不是问题,但对于编译语言,与此相关的问题在本网站上经常出现(也许是民间智慧背后避免浮动比较的关键原因)点数)。

特别是:

  • 在C / C ++中,确保您理解了解不同的FLT_EVAL_METHOD行为,并且该值将取决于编译器,编译器选项和体系结构的选择。

  • C#有类似的行为:这是由/fp option控制的。

  • Java不是那么有问题(根据我的理解,我的Java经验有限):double s只能使用64位精度,但可能会使用扩展的指数范围:净效应是否有些计算会在它们否则会下溢或溢出时给出数值结果。可以使用FP-strict option

  • 停用此功能

答案 1 :(得分:1)

有一些指导方针。但是,它们很难替代正确理解和分析算法属性的努力。你真的应该努力学习足够的基础知识,这样你才能理解那篇文章。

有关个别行动的一些准则包括:

  • 避免减去大致相等的值(或添加相反符号但大致相等的值)
  • 避免添加大小不同的值
  • 如果有的话,避免测试两个浮点值的相等性 一系列数字运算的结果

然而,最重要的指导原则是尽可能使用高质量的数字库,而不是滚动太多自己使用浮点的代码。这只是因为这些图书馆是由专家设计的 - 即了解你不想思考的事物的人 - 以获得良好的数字属性(稳定性等)。

如果你真的必须推出自己的代码,请花点时间找到好的算法。即使你的理解和编码实践不够理想,一个好的算法也会带来好处。