【问题标题】:Check for inf - Objective-C检查 inf - Objective-C
【发布时间】:2019-12-22 20:04:12
【问题描述】:

测试一个双精度(或整数)是否为无穷大的方法是什么,例如进行1/0运算时?

isfinite(n) 似乎不起作用。

【问题讨论】:

  • 整数不能是无穷大。
  • 您可以测试x * 2 == x && x != 0 或类似的东西...对于NaN,您可以测试x != x
  • 你能解释一下“isfinite( ) 似乎不起作用”是什么意思吗?

标签: objective-c


【解决方案1】:

你可以检查

if(d == INFINITY) {}

if(d > DBL_MAX) {}

INFINITY 是在math.h 中定义的常量浮点表达式,表示正无穷大;
DBL_MAX 是在float.h 中定义的常量,表示可以表示的最大双精度数。

也检查here

【讨论】:

  • 您可能应该描述这些符号的来源,以便此答案有用。
  • 注意:这些测试只检查正无穷大,而不是负无穷大。
  • 答案已被接受并得到高度评价,但并不完全正确。问题询问有关检查无穷大的问题。但 DBL_MAX 与 INFINITY 不同。答案中的第一个条件是正确的。第二个不是。
  • @ValeriyVan Afaics 双倍不可能大于DBL_MAX 但不同于INFINITY
  • @Saphrosit,调试我正在尝试捕获溢出,将值与 DBL_MAX 进行比较。并且失败了。这就是我现在知道除了 DBL_MAX 我们有 INFINITY 并且它们不相等的方式。
猜你喜欢
  • 2016-12-19
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多