Mühendislik bana göre değilmiş.Hiçbirisi ilgimi çekmiyorrr)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float girdi=0;
float hassaslik=0.01;
float yaklasim=1;
float cikti=0;
cout<<"bir sayi yaziniz:";
cin>>girdi;
float kok=1;
while(kok<girdi/2)
{ kok=kok+hassaslik;
if(fabs(kok*kok-girdi)<fabs(yaklasim))
{ cikti=kok;
yaklasim=kok*kok-girdi;
}
}
cout <<"yaklasik olarak=" <<cikti;
cin>>girdi;
}
asagi yukarı anlatmak bu istediğim .ama belirteyim bu en kaba bulma yöntemi çok büyük sayilarda patlar program.
ilgimi bunlar çekiyodu benim ama şartlar zaten eninde sonunda insani tipa itiyo Savaş.Seneye tercih yaparken hangisine gitsem daha az kötülük çıkar diye düşüneceksin
.
"Ne Mutlu Türküm Diyene"
Tercih edeceğim alanlar belli zaten. Hepsi ilgimi çekiyor benim.Ama bu tür konulara hiç ilgim yok... Nedense.
kızma ama dediğin gibi gerçekten berbat bir algoritma
arkadaşlar işi işlem yapmak diye bilgisayara eziyet etmeyin. algoritmalarınız hızlı olmalı
nedir o öyle belli bir adım büyüklüğü belirleyip köke ulaşana kadar uygun adım marş.
burada matematik devreye giriyor. sizleri bu bölümlere alırken matematik bilmenizi/öğrenmenizi bunun için istiyorlar. yukarıdaki algoritmada yapılansa her adımda eldeki mevcut bir kök değerine (kökü alınacak sayı)/(eldeki kök değeri) kadar bir sayı eklenip 2'ye bölünmesi ve yeni bir eldeki kök değeri elde edilmesi. kısaca kodu yazan Newton metoduyla köke yaklaşmayı düşünmüş, muhtemelen 5-6 adımla istediğiniz hassasiyette bir kök bulacaktır. daha iyi algoritmalar vardır muhakkak ama bu işinizi görüyor olmalı. ayrıca da sqrt() gibi fonksiyonların bunlardan çok daha iyi algoritmalarla çalıştığından emin olabilirsiniz.
Öğretmenim Newton metodunu araştırdım sayenizde..Çok çok teşekkür ederim..Şimdi kodları gerçekten anladım,aslında Cengiz arkadaşımız sayesinde adamın bu kodlarla sürekli daha yakın bir değeri buldurmaya çalıştığını anlamıştım..Ama bu yolu nereden akıl ettiğini anlamamıştım,Newton metodundaki teğet açıklamasıyla bunu da anladım sayenizde.Bu arada aynı programı C++ ile yaptım,arada framework perdesi olmadığından gözle görülür bir şekilde sqrt() fonksiyonu ile aynı hızda buldu..(Yâni saniye olarak fark yok,ama salise ölçümünde fark olabilir)
Bu algoritma hızlı..Newton metodundan daha hızlı bir yol olabilir mi öğretmenim ?
İlginiz için teşekkür ederim..
9⁵+2⁵+7⁵+2⁵+7⁵=92727 ... 9⁵+3⁵+0⁵+8⁵+4⁵=93084
belki denediğiniz sayılarda sqrt() ile yakın sonuçlar vermiş olabilir ama Newton dan çok daha hızlı hesaplama yöntemleri eminim ki mevcuttur. şu an için kök bulmada daha efektif hangi metod var bilmiyorum, Newton-Raphson çok genel bir yöntem yani tüm fonksiyonlarda kullanılabildiği için direkt karekök bulma gibi çok dar bir kullanımda geri kalacağı kesin. C# veya C++ hangi algoritmaları kullanıyor onları da bilmiyorum açıkcası kodlardan anlamıyorum ama demek istediğim kök bulmak çok temel bir işlem bu yüzden kullandığınız dilin hazır fonksiyonu bırakın algoritma olarak değişken seçimlerinde bile optimize edilmiştir.
burada esas mesele böyle temel işlemlerin yapılmasını sağlayan güzel algoritmaların olduğunu bilmekle beraber mümkünse hazır olanı kullanmaktır. bizim gelişim yapmaya çalışacağımız hazır olmayanı yazarken olmalı. hazır olanı geliştirmek programlama dilini yazanların problemi
Haklısınız tabii,onların hazır fonksiyonu ile yarışmam mümkün değil..Hem uzman matematikçiler ve mühendisler çalışıyor,hem de bilgileri çok çok daha ileri seviyede..Benim amacım da dediğiniz gibi,hazır olmayanı yazmayı öğrenmek..Bunun için önüme gelen bütün problemleri çözmeye çalışıyorum ki,var olan bilgilerimle neler yapabilirim diye ufkum açılsın..Tekrar teşekkür ederim ilginiz için
9⁵+2⁵+7⁵+2⁵+7⁵=92727 ... 9⁵+3⁵+0⁵+8⁵+4⁵=93084
En meşhur algoritmalar Methods of computing square roots - Wikipedia, the free encyclopedia burda. Anlayabilirsen
Foruma üye olmana gerek yok! Facebook hesabınla yorumlarını bekliyoruz!