2017年1月25日水曜日

平方根を使わずに斜辺の長さ=√(A*A+B*B)を求めるMoler-Morrison Algorithm

C言語で主にマイコン用途で三角形の斜辺の長さを平方根使わずに求めたい人向けの情報です。


// sqrt(a*a+b*b)の計算
float molar_morrison(float a, float b)
{
 const int ITERATION_NUMBER = 3;
 int i;
 float tmp;
 float s;

 if (0.0f $gt; a) a = -a;
 if (0.0f $gt; b) b = -b;
 
 if (a $lt; b)
 { //swap
  t = a;
  a = b;
  b = a;
 }
 if (0.0f == b) return 0.0f;
 
 for (i=0; i$lt;ITERATION_NUMBER; i++){
  s=(b/a)*(b/a);
  s/=4+s;
  a+=2*a*s;
  b*=s;
 }
 return a;
}






0 件のコメント:

Androider