2011-01-14 32 views
2

私はLanczos関数を使用するOpenCLで単純なイメージリサンプラーを実装しました。lanczos(0)に特別なケースが必要なのはなぜですか?

ランチョスはによって定義される: Cで書かれLanczos Resampling

inline 
float lanczos(float x, float a) { 
    if(x > fabs(a)) return 0.0f; 
    if(x == 0.0f) return 1.0f; 
    float pix = pi * x; 
    return sinc(pix)*sinc(pix/a); 
} 

なぜ0のための特別な場合がありますか?私がformularに0を渡すとき、それは1を返します。しかし、x == 0のためのチェックを含まなければ、それは動作しません。

誰かが私のために光を当てることができますか? フロリアン

+0

完成したopenclリサンプラは機能しますか?それを共有するためのケア? :-) –

答えて

4

ポールはすでに答えが、場合にはOPは0が特殊なケース=>

1)のx> 0、罪(x)がある理由を知りたいです/ x = 0/0そしてこれはindeterminate formです。ゼロ点について

2)この問題を解決する1つの方法は、罪を拡大することである(X)/ Xテイラー級数に、これを行うことによって、我々が得る:

 
     x2  x4  x6   x8 
1 - ----- + ----- - ------ + ----------- + ... 
     6  120  5040  362880 

3)私たちが見るのxに0を代入してそのシリーズは1に収束します。

+0

いいですね...正しい答えが必要です;) – fho

3

男ああ...私は...時間ランチョス機能を見てきたとシンクが実際にあることを気づいていない:

sinc -> sin(x)/x 

ので、0のための特別なケースを防ぐためのものです無地でシンプルなゼロによる除算... ...

+1

はい、実際には0/0です。この場合、値が数学的に1であることがわかりますが、実装のためにゼロで除算するのを避けるために特殊なケースにする必要があります。 –