[アルゴリズム] 平方根を計算する 2
会社XXXの技術のインタビューで, プログラマ "長老"責任インタビューテオテオは、質問をします:
「Cプログラムは、平方根を計算書きます 2 整数のX "
テオは笑ったし、自分自身に考えた、「同社の主要な技術ベトナムは何という簡単な質問を. プログラミングを学ぶためにいくつかの新しい男ではありません!"
そして、テオは、フラッシュに、以下に示すコードで答えを配っ:
#include<math.h> #include<stdio.h> int main() { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %fn", x, sqrt(x)); }
Input x: 3 Sqrt of 3 = 1.732051
なしBIENプログラム 1 エラーと正しい結果.
テオ自信. そう愚かな質問をするXXX信じられないほどよく知られている会社! 彼は思いました.
経験豊富なプログラマのコードを見テオと表彰: "あなたは、基本的な持っています!". テオ幸せと私は確信していたと思いました 100% 仕事に取り掛かります. そこに他の古いプログラマー頼むで右手:
「あなたは、上の質問に答えます, Cライブラリ関数のsqrt」を使用しないように、この時間
ラブの質問は難しく思えます. テオは考え始めました. しばらくして彼は頭を悩ま開始しました. 今計算する方法? テオは思ったと思いました...
タイムアウト! インタビュアーは、テオのコメント: 「あなたはまだ多くのことを学ばなければなりません」. 彼が滑ったことを知っテオ悲しいです. しかしながら, それはより多くの抜け出すべきと考えているかどうか 1 新しい何か, それがインタビュアーを尋ねました:
"どのように私は平方根を計算することができます? 私は、コードの行数で複雑なアルゴリズムを必要としました?".
エリア開発者「シニア」笑って答えました: 「コンピュータは非常に高速な計算を行います, 代わりに絶対的な答えの, 私は、私は答えを推測するそれをキャッチできました!". トウモロコシの穴テオを見てみます, あなたの古いエンジニア、笑って優しくに説明.
Yの平方根は、そのような数xと定義されています: X2 そしてx = yが存在==します / X. xは、x = yの結果である場合 / X, そうでなければ結果になります 1 x 'は数がxとy / xの間にあります. これはあるのどのくらい知られていません, しかし、我々は持っています 1 取得する方法を推測します 1 平均値であるこのコミュニティ内の一部!
テオはうなずきました.
例: 平方根を計算する必要があります 2 の 3. 私は結果があると思います 1.0. この結果は、適切ではありません, 答えが範囲内であるべきです 1.0 と 3/1.0 = 2.0. 要した平均時間 1 結果として、我々が持っています 1.5. で再試行してください 1.5 と 3/1.5 = 2.0 結果として、我々が持っています 1.75! 多くの反復の後に我々は漸近の結果は答える必要があります!
テオ光景! エンジニアは笑って続けました.
私たちは、正確な結果を持っていないので, 反復回数が無限になる必要があります. しかし、各繰り返しで, まだ十分に正確で、必要に応じて、私は結果を確認しようとします. 例えば、現在の答えは、xがある場合= 1.73, X2 = 2.99 そして私達はちょうど精度 2 カンマの後の数, その後 1.73 適切な答えは. だから我々は、平方根を計算するプログラムを持っています 2 次のように:
#include<math.h> #include<stdio.h> #define PRECISE 0.0001f double mysqrt(int x) { double guess = (double)x / 2; while (fabs(guess*guess - x)/x >= PRECISE) guess = (x/guess - guess) / 2 + guess; return guess; } int main(void) { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %fn", x, mysqrt(x)); return 0; }
入力x: 3
のSQRT 3 = 1.732051
そして、悟りを開いたテオ!
ソース: ktmt.github.io/blog
CoのコードパスカルKO禁止?
これは、簡単にパスカルに転送され、. それは多くの全体よりも異なるません.
この文はとの子供を恐れ広告の説明: (工場(*推測を推測 – X)/X >= PRECISE)
PRECISEよりも推測の精度を確認するためのコマンド. ベースの結果として推測.