Jump to page: 1 2
Thread overview
std.math.sqrt hatası
Jul 14, 2012
erdem
Jul 14, 2012
Kadir Can
Jul 14, 2012
Salih Dinçer
Jul 14, 2012
erdem
Jul 15, 2012
erdem
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
Jul 15, 2012
erdem
Jul 15, 2012
Salih Dinçer
July 14, 2012

Bu aslında işlev yükleme ile alakalı sanırım. Yani std.math modülünde sqrt() işlevi yüklenerek kullanılmış, birinci kullanım parametre olarak float alıyor, ikincisi ise real alıyor. Sorun da bu noktada ortaya çıkıyor: Yüklenmiş işlevlerde hangi tanımın kullanılacağı derleyici tarafından derleme zamanında seçiliyor; ama bu noktada int parametre için hem float hem de real'e uygun olduğu için derleyici hangi tanıma uyacağına karar veremiyor ve hata veriyor. Burada (http://ddili.org/ders/d/islev_yukleme.html) da aynı duruma bir örnek var.
Çözmek için doğrudan float veya real parametre geçirebiliriz; veya bu iki türden birisine daha uygun bir tür seçebiliriz.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 14, 2012

Bu kadar basit bir kod neden hata veriyor olabilir sizce :huh:

import std.stdio, std.math;

struct MatematikYardımcı
{
	/* ... */

   /*
	verilen iki nokta arasındaki uzaklığı döndürür
	*/

   float uzaklık(int x1, int y1, int x2, int y2)
   {
       return sqrt(pow(y2 - y1, 2) + pow(x2 - x1, 2));
   }
}

void main ()
{
   MatematikYardımcı matematik;
	auto uzaklık = matematik.uzaklık(5, 10, 25, 35);
}

Hata mesajı da bu şekilde:

Alıntı:

>

test.d(13): Error: function std.math.sqrt called with argument types
((int))
matches both:
std.math.sqrt(float x)
and:
std.math.sqrt(real x)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 14, 2012

Şu şekilde çalışıyor ve tür dönüşümü gerekiyormuş:

assert(std.math.sqrt(cast(float)9) == 3);

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 14, 2012

Alıntı (erdem):

>
>         return sqrt(pow(y2 - y1, 2) + pow(x2 - x1, 2));
> ```

>

Teşekkürler bu satırı aşağıdaki gibi değiştirince sorun çözüldü.

   return sqrt(cast(float)((pow(y2 - y1, 2) + pow(x2 - x1, 2))));


-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
July 14, 2012

Başka bir çözüm:

       immutable float araToplam = pow(y2 - y1, 2) + pow(x2 - x1, 2);
       return sqrt(araToplam);

(immutable tabii ki gerekli değil.)

Ayrıca hiç önemli değil ama tür dönüşümlerinde ben cast'i en sona saklama taraftarıyım. O sanki bana diğer yöntemler işe yaramayınca başvurulan bir araç gibi geliyor. (Belki de gereksizce böyle düşünüyorum.)

Eğer tür dönüşümü gerekiyorsa ben ilke olarak öncelikle to'yu düşünüyorum:

import std.conv;
// ...
       return sqrt(to!float(pow(y2 - y1, 2) + pow(x2 - x1, 2)));

Ama dediğim gibi: Bu durumda cast'ten bir farkı yok.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

Evet haklısınız bu daha temiz bir kod olduğu için kodu gösterdiğiniz şekilde değiştirdim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

Erdem bu soruyu yazmasaydı ben yazacaktım dün gece projeyi derlemeye çalışmıştım aynı hatayı almıştım

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

Neyse ki C#'a göre çok şanslısınız! Çünkü CLR'dan olsa gerek; zırt pırt her yerde (hatta köşeli parantez içinde bile) tür dönüşümü ister. Ben C#'dan o yüzden soğudum. Mutlaka bir çok nesnenin to veya from ile başlayan bir dönüştürücüsü vardır. Hal böyleyken sizi VS'ye bağlı bırakır. Öyle ya hangi birini ezberleyeceksin...:)

D'nin arkasında yine MS gibi büyük bir firma olabilseydi sanırım C#'dan bile başarılı olabilirdi. Yapılan bir çok şey gönüllülük esasıyla gerçekleştiğine göre şu an deneyebildiğimiz kodlar ve sevinerek çalıştırdığımız programlar büyük bir başarıdır. Sizlerin desteğiyle eminim daha iyi yerlere gelecektir. Bakınız Japonlar, niye biz Türkler olmasın... '(okulların açılmasıyla İstanbul etkinliği istiyorum!)'

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

Hocam onu bunu bırakın da ben .Net düşmanı bir insanım c# ın kütüphanelerinden nefret ediyorum

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

:)

Gerçi düşman olmaya gerek yok çünkü hepimiz tek bir dünyaya "Hello World" yazmaktayız. Ama kütüphaneleri bir karşılaştırırsak şurada (http://dlang.org/phobos/index.html) (dlang.org sitesindeki soldaki başlıklarda) yer alan Phobos kütüphanesi gittikçe kabarmakta...

Hala orada denemediğim o kadar çok kod var ki herhalde ömrüm yetmez ki o zamana kadar bir bu kadar da kod üretilir...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2