objective-c - 浮点比较的最大绝对误差是多少?

标签 objective-c c floating-point precision

我想像这样比较 float :

void assertEquals(CGFloat f, CGFloat g) {
  NSCAssert(fabs(f-g) < 0.1);
}

void assertLE(CGFloat f, CGFloat g) {
  NSCAssert(f <= g + 0.1);
}

我可以使用比 0.1 更严格的界限吗? float 比较的最大误差是多少?是否有宏,以便我不对数字进行硬编码?

最佳答案

IEEE 754 32 位二进制浮点计算中的最大舍入误差约为 1e31。我使用这个程序用 Java 计算了它:

public class Test {
  public static void main(String[] args) {
    float biggest = Float.MAX_VALUE;
    float nextBiggest = Math.nextDown(biggest);
    float gap = biggest - nextBiggest;
    System.out.println(gap / 2);
  }
}

它是两个最大的有限数之间距离的一半。您可以在 Objective-C 中为您使用的格式进行类似的计算。它将太大而无法用于合理的震级计算。

您确实需要明确地或通过选择适合您的数字大小的固定界限来处理相对误差。

关于objective-c - 浮点比较的最大绝对误差是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491570/

相关文章:

ios - 当我们在表格 View 单元格上滑动时如何将图像添加到删除按钮

ios - UICollectionView 与 UIPageViewController

c - 镜像位图图像

c - REDIS 无法查询特定条件

c++ - 在 C++ 中打印 float 的二进制表示

iphone - (iphone、objc)如果用户在录制期间点击 iPhone,(fft/其他频谱分析)会出现意外结果

ios - 当它实现多个其他类时,如何获得最顶层的 viewController?

c - 在 C 中使用 typedef 时是否使用指向结构的指针

C# - 递增 double 值 (1.212E+25)

floating-point - double 型的符合 IEEE 754 标准的 sqrt() 实现