前置き
「もっと良い求め方ありますよ!」
「もっと良いソースありますよ!」
といったご指摘もあるかと思います。
当記事はあくまで「正しい答えをプログラミングで導く」ことを目的としたものです。
どうか、暖かな目でご覧いただけますと幸いです。
本題
三平方の定理とは...
画像のような直角三角形において、
\begin{equation}a^2+b^2=c^2\end{equation}
が成り立つというものです。
これを、C#でMathクラスに頼って実装すると...
//c = a^2 + b^2 である.c=Math.Sqrt(Math.Pow(a,2)+Math.Pow(b,2));上記のように、簡単に実装することができます。PowはPowerのことで、ある値の累乗を求める関数です。
今回の場合、変数a,bの2乗を求めています。
そして、SqrtはSquare root(平方根)のことで、ある数の平方根を求めます。
これらの必要な処理を独自で実装してみます。
Power関数
//<summary>//ある値の累乗を求める関数//<param name="v1">求めたい値</param>//<param name="accuracy">指定する累乗</param>//</summary>publicstaticdoublePower(doublev1,Int32v2){if(v2<1)return0;Int32counter;doubleresult=1;BooleanisNegative=v2<0;//変数が負の値であることも想定//nn = v2 < 0 ? (-1) * v2 : v2;と同上if(isNegative){counter=(-1)*v2;}else{counter=v2;}for(Int32j=0;j<counter;j++){result*=v1;}if(isNegative){result=(1/result);}returnresult;}SquareRoot関数
//<summary>//平方根を求める関数//<param name="v1">平方根を求めたい値</param>//<param name="accuracy">精度。9~10が正確。初期値10</param>//</summary>publicstaticdoubleSquareRoot(doublev1,Int32accuracy=10){if(accuracy<1)return0;doubleresult=v1;for(intx=0;x<accuracy;x++){//result = (result + v1 / result) / 2.0 と同上varn1=v1/result;varn2=result+n1;result=n2/2.0;}returnresult;}実行結果
確認用として、本家のものと比較してみました。
ソースコード:
Program.cs
usingSystem;namespaceMathSqrt{classMainClass{//a^2 + b^2 = c^2staticdoublea=12;staticdoubleb=5;staticdoublec=0;publicstaticvoidMain(string[]args){Console.WriteLine("Hello Math!");varna=MyMath.Power(a,2);varnb=MyMath.Power(b,2);c=MyMath.SquareRoot(na+nb);Console.WriteLine("三平方の定理(本家Math): {0}",Math.Sqrt(Math.Pow(a,2)+Math.Pow(b,2)));Console.WriteLine("三平方の定理(自作Math): {0}",c);Console.ReadKey();}}}最後に
最後までご覧いただきありがとうございました。
誤字脱字/間違い等ございましたら、コメントにてご指摘いただけますと幸いです。

