目标c中的nan double

时间:2012-12-11 09:40:10

标签: objective-c double division nan multiplication

我有这个等式

double x = ((newCount/allCount)/.8)*5.0;

newCount是值为0的double allCount是一个值为0的双重

x的结果是-nan(0x8000000000000)

为什么会发生这种情况以及如何在 objective c 中检查此值以为其指定默认值

3 个答案:

答案 0 :(得分:1)

你是diving by zero。您可以使用以下方式检查:

isnan(x)

答案 1 :(得分:0)

allCount是0,因此你只是除以0(如果你不知道那就不可能......)所以在你指定x之前,只需确保allCount不是0。

if (allCount != 0)
    double x = ((newCount/allCount)/.8)*5.0;

答案 2 :(得分:0)

问题在于分母(allCount)为0;除以零是不允许的,答案不是数字。你可以做的最简单的事情就是在进行分割之前测试它:

if (allCount != 0) {
  x = ((newCount/allCount)/.8)*5.0
} else {
  x = defaultValue;
}

使用C的浮点环境和测试FE_DIVBYZERO异常有更复杂的方法,但是这是标准的,很少使用,因此后来的代码读者可能更难理解。