Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9725

C#で外部ライブラリに頼らず三平方の定理(ピタゴラスの定理)を計算してみた

$
0
0

前置き

「もっと良い求め方ありますよ!」
「もっと良いソースありますよ!」
といったご指摘もあるかと思います。
当記事はあくまで「正しい答えをプログラミングで導く」ことを目的としたものです。
どうか、暖かな目でご覧いただけますと幸いです。

本題

三平方の定理とは...

image.png

画像のような直角三角形において、

\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));

上記のように、簡単に実装することができます。
PowPowerのことで、ある値の累乗を求める関数です。
今回の場合、変数a,bの2乗を求めています。
そして、SqrtSquare 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();}}}

image.png

最後に

最後までご覧いただきありがとうございました。
誤字脱字/間違い等ございましたら、コメントにてご指摘いただけますと幸いです。


Viewing all articles
Browse latest Browse all 9725

Trending Articles