{"id":494,"date":"2009-10-04T22:17:05","date_gmt":"2009-10-04T22:17:05","guid":{"rendered":"http:\/\/shultays.wordpress.com\/?p=218"},"modified":"2009-10-04T22:17:05","modified_gmt":"2009-10-04T22:17:05","slug":"buyuk-sayilar-uzerinde-4-islem","status":"publish","type":"post","link":"http:\/\/enginmercan.com\/?p=494","title":{"rendered":"B\u00fcy\u00fck say\u0131lar \u00fczerinde 4 i\u015flem"},"content":{"rendered":"<p>Nerdeyse 3 haftad\u0131r Nottingham&#8217;day\u0131m. Mutluyum. Yazam\u0131yorum =)<\/p>\n<p>Genelde b\u00fct\u00fcn bo\u015f zaman\u0131m\u0131 bu directx projesi yiyor. Ama d\u00fcn ve \u00f6nceki g\u00fcn zaman ay\u0131r\u0131p (asl\u0131nda inada girip =D) integer s\u0131n\u0131rlar\u0131n\u0131 ta\u015facak say\u0131lar \u00fczerinde i\u015flem yapmay\u0131 sa\u011flayan bir k\u00fct\u00fcphane yazabildim. Neden b\u00f6yle bir \u015fey yapt\u0131n diye sorarsan\u0131z bir \u015fey diyemem =)<\/p>\n<p>Kullan\u0131m\u0131 basit, operator overloading eklemeyi denedim \u00e7al\u0131\u015f\u0131yor gibi. Ama ilk defa b\u00f6yle bir \u015fey yapt\u0131\u011f\u0131m i\u00e7in ne kadar do\u011fru bilmiyorum.<\/p>\n<p>Nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na gelince, say\u0131lar\u0131 bir karakter arrayi olarak tutuyor. Array in her eleman\u0131n\u0131 bir basamak olarak d\u00fc\u015f\u00fcnelim, yani 256 l\u0131k taban \u00fczerinde \u00e7al\u0131\u015f\u0131yoruz \ud83d\ude00<\/p>\n<p>Mesela toplama yapmak i\u00e7in<\/p>\n<p>a b c d<br \/>\ne f g h  +<br \/>\n&#8212;&#8212;&#8212;<br \/>\n1 2 3 4<\/p>\n<p>\u00f6nce sondan ba\u015fl\u0131yor, d+h i buluyor ve bir integer a at\u0131yor. sonra bu integer \u0131n son 8 bit ini (int&amp;0xFF) sonu\u00e7ta 4 numaral\u0131 byte a yaz\u0131yor. daha sonra bunu sa\u011fa 8bit shift ediyor ve kalan\u0131 bir sonraki basama\u011f\u0131n toplanmas\u0131nda kullan\u0131yor. kalan bu durumda zaten en fazla 1 olabilir. sonra ayn\u0131 i\u015flemi cg bf ae i\u00e7in yap\u0131yor ve sonucu buluyor.<\/p>\n<p>\u00e7arpma i\u015flemi biraz daha kar\u0131\u015f\u0131k. \u00f6nce h ile d den ba\u015flay\u0131p a b c d ile tek tek \u00e7arp\u0131yor. yine ayn\u0131 \u015fekilde kalan\u0131 bir sonraki basama\u011fa at\u0131yor (bu sefer kalan 1 den fazla olabilir). sonra ayn\u0131 \u015fekilde g ile a b c d yi \u00e7arp\u0131yor ve sonuca ekliyor. b\u00f6yle giderek sonucu hesapl\u0131yor.<\/p>\n<p>b\u00f6lme i\u015flemi ise en zoru =D<\/p>\n<p>a b c d<br \/>\n        e<\/p>\n<p>\u00f6nce b\u00f6leni ayn\u0131 hizaya gelecek \u015fekilde kayd\u0131r\u0131yor<\/p>\n<p>a b c d<br \/>\ne 0 0 0 <\/p>\n<p>e\u011fer ilk say\u0131 di\u011ferinde b\u00fcy\u00fck ise say\u0131y\u0131 \u00e7\u0131kar\u0131yor ve sonu\u00e7ta o k\u0131sma gelen bit i 1 yap\u0131yor. daha sonra e say\u0131s\u0131 sa\u011fa 1 kez shift ediyor (t\u00fcm say\u0131y\u0131, yani hex olarak 0x2F 00 00 00 ise say\u0131 shift edince 0x17 80 00 00 oluyor) ve ayn\u0131 i\u015flemi tekrarl\u0131yor. sonu\u00e7ta b\u00f6l\u00fcmden geriye kalan say\u0131 kalan oluyor ve sonu\u00e7ta elde etti\u011fimizde b\u00f6l\u00fcm oluyor.<\/p>\n<p>kodumuz ve \u00f6rnek program <a href=\"http:\/\/http:\/\/www.shultays.com\/largenum.rar\">burada<\/a><\/p>\n<p>Eklenecek daha \u00e7ok \u015fey var, integer say\u0131lar\u0131n\u0131 toplayabilme \u00e7\u0131karabilme deste\u011fi, onluk tabanda bast\u0131rabilme deste\u011fi vs&#8230; Asl\u0131nda hepsini tasarlad\u0131m ama koda d\u00f6kmeye \u00fc\u015feniyorum. Kim bilir belki bi g\u00fcn =)<\/p>\n<p>Asl\u0131nda Odt\u00fc yar\u0131\u015fmas\u0131nda beri akl\u0131mda idi bu proje, o zaman bu tip bir sistem yapm\u0131\u015ft\u0131m ama o hexadecimal olarak de\u011filde 10luk tabanda \u00e7al\u0131\u015f\u0131yordu o y\u00fczden \u00e7ok daha az performansl\u0131 idi ve ayr\u0131ca b\u00f6lme i\u015flemi yoktu =)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nerdeyse 3 haftad\u0131r Nottingham&#8217;day\u0131m. Mutluyum. Yazam\u0131yorum =) Genelde b\u00fct\u00fcn bo\u015f zaman\u0131m\u0131 bu directx projesi yiyor. Ama d\u00fcn ve \u00f6nceki g\u00fcn zaman ay\u0131r\u0131p (asl\u0131nda inada girip =D) integer s\u0131n\u0131rlar\u0131n\u0131 ta\u015facak say\u0131lar \u00fczerinde i\u015flem yapmay\u0131 sa\u011flayan bir k\u00fct\u00fcphane yazabildim. Neden b\u00f6yle bir \u015fey yapt\u0131n diye sorarsan\u0131z bir \u015fey diyemem =) Kullan\u0131m\u0131 basit, operator overloading eklemeyi denedim \u00e7al\u0131\u015f\u0131yor [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10,11],"tags":[],"class_list":["post-494","post","type-post","status-publish","format-standard","hentry","category-algoritma","category-cc","category-eglence"],"_links":{"self":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=494"}],"version-history":[{"count":0,"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/494\/revisions"}],"wp:attachment":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=494"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}