Arama butonu
Bu konudaki kullanıcılar: 1 misafir
2
Cevap
2985
Tıklama
0
Öne Çıkarma
c de math.h kullanmadan kök alma
D
11 yıl
Binbaşı
Konu Sahibi

bir ödev için math.h fonksiyonunu kullanmadan c dilinde kök alma fonksiyonu yazmam lazım. benim yazdığım program 1'den büyük sayılar için güzel çalışıyor ama sinüs,cosinüs hesabı da olacağından bana 0 ve 1 arasında da çalışması lazım. ancak bu program orda hata veriyor. nasıl düzeltebilirim?

#include<stdio.h>
#include<conio.h>

int main()
{
double i,j;
float num;
j=0.000001;


printf("number : ");
scanf("%f",&num);

for(i=0;i<num;i=i+j)
{
if((i*i)>=num)
{
i=i-j;
break;
}
}
printf("%.5f",i);
getch();
return 0;
}


not: arkadaşlar bu programı başka bir programın içinde fonksiyon olarak kullanacağım. ordan gelecek değişken float türünde olacak. yani kökü alınacak sayı float tipinde olmalı, geri kalan değişkenler herhangi bir tipte olabilir.

şimdiden teşekkür ederim.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi deneyici23 -- 30 Ekim 2014; 12:48:27 >

Q
11 yıl
Yüzbaşı

Merhaba,

Asagida hayran kalinabilecek bir kod var. Queke III icerisinde 1999 yilinda kullaniliyor. Kok alma islemini O(1)'de yapiyor.

Daha detayli bilgiyi buradan bulabilirsin.

 
// tert kok alma islemini yapar. Kodun orjinalini bozmamak icin yeni bir fonksiyon yazdim asagida.
// 1 / sqrt(f) islemini yapar.
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;

x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed

return y;
}

// bu fonksiyon istenilen sqrt(f)'i doner.
float fast_sqrt(float f) {
return 1 / Q_rsqrt(f);
}


Yalniz belirtmek isterim ki belirli bir oranda hata payi var. Ancak kucuk sayilarda virgulden sonra 2-3 basamaga kadar sorun olmuyor diye biliyorum.





< Bu mesaj bu kişi tarafından değiştirildi qamyoncu -- 1 Kasım 2014; 11:56:11 >
Bu mesaja 1 cevap geldi.
E
11 yıl
Teğmen

John Carmack'in Efsane Kodu Değil Mi Bu ? :)




Bu mesajda bahsedilenler: @qamyoncu
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.