2011-09-05 6 views
21

1/0の演算が実行されたときのように、double(または整数)が無限大であるかどうかをテストする方法は誰にも分かりますか?inf-objective cのチェック

isfinite(n)は機能していないようです。

あなたが確認できる
+7

整数は無限にすることはできません。 –

+0

'x * 2 == x && x!= 0'かそのようなものをテストできます... NaNの場合、' x!= x'をテストできます。 –

+2

"isfinite()がうまく動作していない"という意味を明確にすることはできますか? " –

答えて

36

if(d == INFINITY) {} 

又は

if(d > DBL_MAX) {} 

INFINITYは正の無限大を表すmath.hで定義された一定のフロート式です。
​​は、表現できる最大の倍数を表すfloat.hで定義される定数です。

チェックもhere

+0

この回答が有用であるためには、これらの記号がどこから来たのかを記述するのがよいでしょう。 –

+0

(d == INFINITY)が扱われた場合、 – John67

+1

@Kerrek SB:不足している情報を追加しました – Saphrosit

17

<のmath.h >は、その引数のサイズを確認してからタイプのために適切な__isinf関数を呼び出すために定義されたマクロ、isinfを、持っている:

#define isinf(x) \ 
     ( sizeof (x) == sizeof(float) ? __isinff((float)(x)) \ 
     : sizeof (x) == sizeof(double) ? __isinfd((double)(x)) \ 
              : __isinf ((long double)(x))) 

マクロをarchitecture/i386/math.hとarchitecture/arm/math.hで同じです。関数そのものの実装自体はおそらく異なります。

あなたがそのようなことに遭遇することが起こるはずです。これは、負の無限大のための真のと同様に、正戻ります:

2011-10-26 18:41:53.424 ToInfinityEtc [30197:903]確かにそうです!
2011-10-26 18:41:53.426 ToInfinityEtc [30197:903]

+0

しかし、isinfはGNUコンパイラ専用です。 llvmと互換性がありません。 xcodeは、 "undeclerated identifier isinfの使用"と言っていますが、フラグ+クリックでcmath.Nにナビゲートしてmath.hを手動でインポートしました。引き続きcmathにナビゲートし、このエラー「undeclerated identifier isinfの使用」のためにyesをコンパイルできません。最後に、isinfの代わりにstd :: isinfを置き換えました。 –

+1

math.hと 'isinf()' [両方ともPOSIX標準の一部です](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html)、@ N。ラモス。彼らはGCCとは関係がありません。どこか別の問題があります。 –

関連する問題