C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.85929 の関連記事表示

<< 0 >>
■85929  平方根を高速で求める方法
□投稿者/ 顔万谷 -(2017/12/03(Sun) 16:14:01)

    分類:[.NET 全般] 



    二点間の距離を求めるために
    sqrt( a*a + b*b )

    という計算を何度も行うため、
    多少、精度が悪くても良いので高速に行いたいのですが
    検索すると結構、高速化のアルゴリズムが書かれたページが見つかります。

    http://www.geocities.co.jp/SiliconValley-PaloAlto/5438/sqrt.htm

    例えば、このページには

      u_long sqrt2(u_long f)
      {
        u_long s = f,t;
        
        if(x == 0) return 0;
        do
        {
          t = s;
          s = (t + f / t) >> 1;
        }while(s < t);
        return t;
      }


    というコードが書かれていますが
    これをVBで書き換えるとどうなりますか?

    自分でやろうとしたのですが
     if(x == 0)
    という分岐が出てくるのに
    その前にxが宣言されていないので
    どうすれば良いか分かりませんでした。



親記事 /過去ログ147より / 関連記事表示
削除チェック/

■85930  Re[1]: 平方根を高速で求める方法
□投稿者/ 774RR -(2017/12/03(Sun) 17:58:07)
    通常 x86 では float/double の sqrt は1命令なので、何も考えずに Math.Sqrt() を使うのが最速。
    真に距離ではなくて、近い遠いの判断だけでよいのなら Sqrt() もいらないよ
記事No.85929 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85934  Re[1]: 平方根を高速で求める方法
□投稿者/ furu -(2017/12/04(Mon) 11:29:12)
    No85929 (顔万谷 さん) に返信
    > 自分でやろうとしたのですが
    >  if(x == 0)
    > という分岐が出てくるのに
    > その前にxが宣言されていないので
    > どうすれば良いか分かりませんでした。

    s = (t + f / t) >> 1;で
    t=0だとゼロ割しちゃうから
    if(x == 0) return 0;は
    if(s == 0) return 0;の間違いかと思います。

    コプロセッサ持ってないPlayStationの話なので
    774RRさん書かれているMath.Sqrt()と較べて見てはどうですか。
記事No.85929 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85947  Re[2]: 平方根を高速で求める方法
□投稿者/ ぶなっぷ -(2017/12/05(Tue) 08:57:45)
    この手の話は経験上、毎回の sqrt( a*a + b*b ) を速くするより、
    式の簡略化の方が効果が大きいです。
    
    例えば、複数の2点間の距離のうち、最小となる2点を求めるなら、
    a*a + b*b の結果を比較すれば十分。
    
    なぜなら、a*a + b*b が最小なら、sqrt( a*a + b*b )も最小と
    決まっているから。
    
    最小の2点が見つかった後、最後に画面に2点間の距離を表示する
    際に sqrt() すれば良いです。
    
    私の方は、上記の式の確認は行っておりませんが、
    同じように簡略化できるか検討してみると良いです。
記事No.85929 のレス /過去ログ147より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -