c - 浮点运算的 Do-s 和 Don't-s?

标签 c floating-point ieee-754

对于浮点运算(IEEE754,以防混淆)有哪些好的做法和不该做的事,以确保您的结果具有良好的数值稳定性和高精度?

我知道有些人喜欢不减去相似数量级的数量,但我很好奇还有哪些其他好的规则。

最佳答案

首先,以 float 必须遵循与实数相同的规则的概念输入...一旦您接受了这一点,您就会理解大部分陷阱。

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

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

关于c - 浮点运算的 Do-s 和 Don't-s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102573/

相关文章:

c - 在使用mmap的Linux上分配地址零失败

C - 返回字符串的函数超时

c - C 中的单浮点十进制到二进制

c++ - C++ 标准是否对 float 的表示做了任何规定?

java - 给定两个 double ,如何确定它们的商是否准确?

floating-point - 在 double 的 MIN/MAX 范围内是否有 double 不能表示的整数?

与 strcmp 比较加密字符串

c - 方程双指针指向 NULL 在 C 中给出段错误

string - 在 Julia 中将整数转换为字符串

php - 如何自动将小数转换为数字而不是 php 中的字符串?