2017-01-11 4 views
-1

x<=1を知っている場合、sqrt(float32bit x)を近似するにはどうすればよいですか?既知の0 <= x <= 1のsquare_root(x)の高速近似

範囲x<=1を利用するには、いくつかのトリックが必要です。

戻り値は正確である必要はありませんが、最大誤差は<0.001です。

私は言語は気にしませんが、CPU(GPUではなく)ではC++が好きです。
私は明示的な式がテーブルのルックアップよりも優れていると思います。

私の3Dゲーム(VS 2015 + Ogre3D + Bullet)のパーティクルには役に立ちますが、私はそれについて何か手がかりを見つけることはできません。
私はdownvoteの嵐の理由は、それは割り当て/インタビューのように見えるのですか?
...解決策はすでによく知られていますか?

+1

[高速逆平方根](https://en.wikipedia.org/wiki/Fast_inverse_square_root)をご覧ください。 –

+0

@ Mark Ransomプラットフォームに依存していますか? – javaLover

+0

@javaLoverそのトリックの効率的で標準に準拠した実装はありませんが、それはかなり移植性があります。 –

答えて

2

平方根は、通常、FSQRT which getting increasingly fasterによって計算されます。あなたが実際に打つことができない単一の指示です。たとえば、逆平方根が高速な場合は、その結果を直接使用できない限り役に立ちません。再度反転する必要がある場合は、FDIVだけでもFSQRTと同じくらい時間がかかります。

+0

ありがとう!それは貴重な情報です!今私はこのことを求めるのをやめます。 – javaLover

+0

逆平方根を使用するために分割する必要はありません。 '1 /(1 /√x)' == 'x *(1 /√x)'である。 –

+0

@javaLoverあなたが探しているのを止める前に[なぜSSEスカラーsqrt(x)がrsqrt(x)* xよりも遅いのですか?](http://stackoverflow.com/questions/1528727/why-is-sse -scalar-sqrtx-slower-than-rsqrtx-x)を使用します。 –

関連する問題