代码之家  ›  专栏  ›  技术社区  ›  willc2

为什么这次没有崩溃?我不是在这里除以零吗?

  •  13
  • willc2  · 技术社区  · 16 年前

    float slopeXY(CGPoint p1, CGPoint p2)
    {
        return ((p2.y - p1.y) / (p2.x - p1.x));
    }
    

    如果我给它一条零号线,

    CGPoint p1 = CGPointMake(0, 10);
    CGPoint p2 = CGPointMake(0, 10);
    
    float sxy = slopeXY(p1, p2);
    

    4 回复  |  直到 15 年前
        1
  •  29
  •   Stephen Canon    16 年前

    对于OSX上的默认浮点环境,浮点除零不会导致陷阱或异常。0.0/0.0将返回NaN,并在fpscr中提升无效浮点状态标志。将非零值除以0.0将返回一个无穷大,并升起“除以零”标志。

        2
  •  5
  •   RichN    16 年前

    只有整数除法才会出现被零除的错误。 对于float,通常得到无穷大,除非红利为零。

        3
  •  1
  •   rlbond    16 年前

        4
  •  1
  •   aib    16 年前

    因为这是未定义的行为。你的程序被允许以任何方式运行,包括崩溃或向我们展示你被零除后所破坏的宇宙的最后一瞥。

    根据C[99]标准第6.5.5.5节:

    /运算符的结果是 第二个操作数;结果 如果 第二个操作数为零,表示行为 这是不确定的。