Do-s和DO-for浮点运算?

gct*_*gct 13 c floating-point ieee-754

对于浮点运算(IEEE754,如果存在混淆)有什么好的做法和不做什么,以确保良好的数值稳定性和结果的高精度?

我知道有些人不喜欢减去相似数量的数量,但我很好奇其他有什么好的规则.

Pol*_*878 12

首先,进入与浮点数做概念必然遵循相同的规则,实数......一旦你接受了这一点,你就会明白最缺陷.

以下是我一直遵循的一些规则/提示:

  • 永远不要将浮点数与零或其他任何东西进行比较(IE不会这样做: if (myFloat == 0)
  • 关联属性不适用于浮点...意思 (a + b) + c != a + (b + c)
  • 请记住,总有四舍五入
  • 浮点数不一定具有唯一的倒数
  • 没有带浮点数的闭包......永远不要假设浮点运算的结果导致有效的浮点数.
  • 分配财产不成立
  • 尽量避免使用浮点比较...因为舍入错误会导致意外结果


bta*_*bta 5

带浮点数的#1"不"规则是:

不要使用整数就足够的浮点数.


APr*_*mer 5

要了解浮点的行为方式.

不要相信简单的规则就足以正确使用它们.

例如,至少有两个答案提出应该禁止比较浮点的平等性.首先,有些情况下需要比较它们的平等性.然后,当进行范围检查是需要的时候,你还需要意识到它有它的缺陷,例如它不是传递性的,这是大多数人将为相等性测试所假设的属性.


Oza*_*zan 5

请记住,由于错误的浮点运算,人们死亡并造成了数十亿美元的损失