{"id":29,"date":"2019-10-12T23:19:57","date_gmt":"2019-10-12T20:19:57","guid":{"rendered":"http:\/\/www.cuneytbayrak.com\/?p=29"},"modified":"2025-02-21T00:49:29","modified_gmt":"2025-02-20T21:49:29","slug":"c-karekok-hesaplama-algoritmasi","status":"publish","type":"post","link":"http:\/\/www.cuneytbayrak.com\/?p=29","title":{"rendered":"C# Karek\u00f6k Hesaplama Algoritmas\u0131"},"content":{"rendered":"<p>Projelerimizde haz\u0131r matematik fonksiyonlar\u0131n\u0131 kullan\u0131r\u0131z genelde. \u00d6rne\u011fin 19 say\u0131s\u0131n\u0131n karek\u00f6k\u00fcn\u00fc almak i\u00e7in \u201cdouble sayi = Math.Sqrt(19);\u201d kodunu yazd\u0131\u011f\u0131m\u0131z an sonucu bize\u00a0 4.358898943540674 \u015feklinde double olarak d\u00f6nd\u00fcr\u00fcr. Burada bir s\u0131k\u0131nt\u0131 yok. Peki neden haz\u0131r \u201cMath.Sqrt()\u201d metodunu kullanmak yerine bir algoritma geli\u015ftirmek isteyelim. Haz\u0131r fonksiyon ile elde etti\u011fimiz double say\u0131 virg\u00fclden sonra 15 hane. Daha hassas sonu\u00e7lar elde etmek istedi\u011fimiz projelerimiz olabilir. Mesela virg\u00fclden sonra 28 haneye kadar basamak g\u00f6rmek isteyebiliriz. \u00d6zellikle kripto algoritmalar\u0131nda (MD5,SHA512 vb\u2026 gibi) ve uzay biliminde \u00f6l\u00e7\u00fcmler ve hesaplamalar virg\u00fclden sonra \u00e7ok daha fazla basamak say\u0131lar\u0131 ile \u00e7al\u0131\u015fmakta. Bu durumda kendi karek\u00f6k algoritmam\u0131z\u0131 kurmam\u0131z gerekebilir. A\u015fa\u011f\u0131da ki kodlar\u0131 inceleyin derim.<\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csharp&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\">public static decimal karekokalma(decimal dec)\r\n \r\n{\r\n \r\ndecimal x = 7;\r\n \r\ndecimal y = dec;\r\n \r\ndecimal ka = 0;\r\n \r\nfor (int i = 0; i&lt;50; i++)\r\n \r\n{\r\n \r\nx = Convert.ToDecimal(0.5) * Convert.ToDecimal(x + (y \/ (x)));\r\n \r\nif (ka == x)\r\n \r\n{\r\n \r\nbreak;\r\n \r\n}\r\n \r\nka = x;\r\n \r\n}\r\n \r\nreturn ka; \/\/19 i\u00e7in sonu\u00e7 \"4.3588989435406735522369819840\" \u015feklinde olacakt\u0131r.\r\n \r\n}<\/pre>\n<\/div>\n<p>Kodu inceledi\u011fimiz de matematik ile ha\u015f\u0131r ne\u015fir olanlar\u0131m\u0131z\u0131n hemen fark\u0131na varaca\u011f\u0131 babil y\u00f6ntemi g\u00f6ze \u00e7arpmaktad\u0131r. Babil y\u00f6ntemi asl\u0131nda basit bir iterasyon y\u00f6ntemidir. Tahmin edilen de\u011fer i\u015flem sonucu \u00e7\u0131kan de\u011fere yakla\u015fana ve nihayetinde e\u015fit olana kadar bir d\u00f6ng\u00fcye sokulur. Olay bu kadar basit.<\/p>\n<p>x=0,5*(x+y\/x) \u015feklinde matematize edilmi\u015f bir denklem var kar\u015f\u0131m\u0131zda. Denklemi bir ba\u015fka \u015fekilde \u015f\u00f6yle yazabiliriz. x=1\/2*((x\u00b2+y)\/x)\u00a0 \u2014-&gt;\u00a0 2x\u00b2=x\u00b2+y \u2014\u2014&gt;\u00a0 x\u00b2=y<\/p>\n<p>Zaten bizim de \u00e7\u00f6zmek istedi\u011fimiz \u00f6yle bir x bulal\u0131m ki x\u00b2=y\u00a0 \u015fart\u0131n\u0131 sa\u011flas\u0131n. Bu denklemlerde y say\u0131s\u0131 karek\u00f6k\u00fcn\u00fc bulmak istedi\u011fimiz say\u0131, x say\u0131s\u0131 ise ilk tahmin de\u011ferini ifade etmektedir.<\/p>\n<p>Kolay gele&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Projelerimizde haz\u0131r matematik fonksiyonlar\u0131n\u0131 kullan\u0131r\u0131z genelde. \u00d6rne\u011fin 19 say\u0131s\u0131n\u0131n karek\u00f6k\u00fcn\u00fc almak i\u00e7in \u201cdouble sayi = Math.Sqrt(19);\u201d kodunu yazd\u0131\u011f\u0131m\u0131z an sonucu bize\u00a0 4.358898943540674 \u015feklinde double olarak d\u00f6nd\u00fcr\u00fcr. Burada bir s\u0131k\u0131nt\u0131 yok.&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"http:\/\/www.cuneytbayrak.com\/?p=29\">Devam\u0131n\u0131 Oku<span class=\"screen-reader-text\">C# Karek\u00f6k Hesaplama Algoritmas\u0131<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":2,"footnotes":""},"categories":[2],"tags":[11],"class_list":["post-29","post","type-post","status-publish","format-standard","hentry","category-algoritmalar","tag-karekok","excerpt"],"_links":{"self":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/29","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=29"}],"version-history":[{"count":1,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/29\/revisions"}],"predecessor-version":[{"id":30,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/29\/revisions\/30"}],"wp:attachment":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}