2016-07-05 12 views
-2

C/C++のnumpyのnumpy.nan_to_num関数と同等の動作を実現するにはどうすればよいですか?非PythonプログラマのためのC/C++のnumpy.nan_to_numに相当します。

Specificiation:

が有限の数値とゼロとINFとナンを交換してください。

非常に大きい数値と負の無限大の(正数)の無限大で、数値が小さい(または負の)数値の負の無限大()を置き換える配列またはスカラーを返します。 ... NaNは ゼロに置き換えられ、出力dtypeに収まる最大(最小または 負の)浮動小数点値で無限大(-infinity)が置き換えられます。

+1

CにはC99以降の 'fpclassify()'があります。例外的な浮動小数点値(NaN、無限大、準ノーマル)をチェックすることができます。これは、記述した動作を提供する関数を実装するために必要なものです。 –

答えて

1

連続性を維持したいので、これを使用して終了しました。これはopenclでも動作し、C99のものは必要ありません。

float nan_to_num(float num){ 
    if (isinf(num)){ 
    if (signbit(num)) 
     return MAXFLOAT; 
    else 
     return -MAXFLOAT; 
    } else { 
    return num; 
    } 
} 
+0

「C99のもの」の何が問題なのですか? –

+0

私はC99のサブセットであるopencl Cを使用しています。 –

+0

それは意味がありますが、間違いなく質問に追加されているはずです! –

1

これを試してみてください:

#include <math.h> 

double normalize(double num) 
    if (isnormal(num)){ 
     return num; 
    } else { 
     return 0; 
    } 
} 

を無限大が特別に処理する場合、あなたはまた、条件としてisinf(num)を使用し、お好みの「ビッグ」の数を返すことができます。

関連する問題