February 10, 2012

Bir de "%a" belirtecini unutmamak gerek. Onun C++'ta olmadığını biliyorum ama başka dillerden haberim yok. Kesirli sayıları onaltılı gösteriminde yazdırıyor. Programdaki "%.70f"i "%a" ile değiştirin:

       writefln("%s: %a", i, toplam);

Düzeltme: IEEE ile ilgili bir gösterim ama tam kendisi değil. Ve IEEE bit gösterimini olduğu gibi görün: :)

'--- float denemesi ----
0: 0x1.99999ap-4
1: 0x1.99999ap-3
2: 0x1.333334p-2
3: 0x1.99999ap-2
4: 0x1p-1
5: 0x1.333334p-1
..'

"%a" şurada geçiyor:

http://ddili.org/ders/d/cikti_duzeni.html

Ali

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

February 12, 2012

Teşekkürler Ali ağabey, bu gösterim şekilleri de kesinlikle çok faydalı...

Bu arada, kırk kutu sorusu (http://ddili.org/forum/thread/713)ndaki BIGINT kütüphanesi ile çıkan sonucun senin hesapladığından farklı olduğunu an itibariyle görmüş bulunmaktayım. Hesaplarken hangi yöntemi kullanmış olabilirsin?

'X Yöntem: 2217887688014775253-706633418653155893774469751200
BIGINT.d: 2217887688014775253-530164406871305824725601615872'

Hadi son kutuyu hesaba dahil etmediğini (n-1) varsaysak sonu 199 ile bitecek ki tireye (-) kadar değiştirmesi imkansız.

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

February 12, 2012

Alıntı (Salih Dinçer):

>

Hesaplarken hangi yöntemi kullanmış olabilirsin?

Ben özyineleme kullanmıştım ama duyarlık konusunu gözardı etmişim. O yüzden benim yöntem hatalı: :blush:

import std.stdio;

real hesapla(size_t düzey)
{
   return düzey ? düzey + düzey * hesapla(düzey - 1) : 0;
}

void main()
{
   foreach (i; 0..41) {
       writefln("%s: %.0f", i, hesapla(i));
   }
}

Ayrıca not: Kırk gibi küçük bir değerde farkedilmiyor ama ama özyineleme bazı problemlerde daha yavaş olur. Örneğin burada 39'uncu düzey iki kere hesaplanıyor: bir kere kendisi için bir kere de 40'ıncı düzey hesaplanırken. Daha aşağıdaki düzeyler çok daha fazla sayıda hesaplanıyorlar. (Derleyici bazı durumlarda tail recursion elimination gibi eniyiliştirmeler yoluyla bu yavaşlığı ortadan kaldırabilir ama olsun.)

Ali

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

February 12, 2012

Alıntı (acehreli):

>

Alıntı (Salih Dinçer):

>

Hesaplarken hangi yöntemi kullanmış olabilirsin?

Ben özyineleme kullanmıştım ama duyarlık konusunu gözardı etmişim. O yüzden benim yöntem hatalı: :blush:

> import std.stdio;
>
> real hesapla(size_t düzey)
> {
>     return düzey ? düzey + düzey * hesapla(düzey - 1) : 0;
> }
>
> void main()
> {
>     foreach (i; 0..41) {
>         writefln("%s: %.0f", i, hesapla(i));
>     }
> }
> ```

>
> Ayrıca not: Kırk gibi küçük bir değerde farkedilmiyor ama özyineleme bazı problemlerde daha yavaş olur. Örneğin burada 39'uncu düzey iki kere hesaplanıyor: bir kere kendisi için bir kere de 40'ıncı düzey hesaplanırken. Daha aşağıdaki düzeyler çok daha fazla sayıda hesaplanıyorlar. (Derleyici bazı durumlarda *tail recursion elimination* gibi eniyiliştirmeler yoluyla bu yavaşlığı ortadan kaldırabilir ama olsun.)
>
> Ali
>

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

Teşekkürler, bu da leziz bir çözüm olmuş. Peki bu işlevi (recursive function) isimsiz (lambda function) hale getirmek mümkün mü?

Dip Not: Gerçi görülecektir; yukarıdaki son ileti tekrar etmiş. Adeta özyineleme (recursive) yapmış...:)

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

February 15, 2012

Alıntı (Salih Dinçer):

>

bu işlevi (recursive function) isimsiz (lambda function) hale getirmek mümkün mü?

Çok ilginç bir soru. Herhalde olamaz çünkü yineleyebilmesi için kendisini çağırması gerekir ama çağıracak ismi olmadığına göre çağıramaz. (?) :)

Ali

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

February 16, 2012

Ben şöyle bir şey (prototype) yapabileceğimi zannettim ama olmadı...:)

void ekranaYaz(real function (size_t) y, short x) {
   int i;
   real r;
   for(i=0; i<x; i++) r = y(i);
   writefln("%s:\t%.0f", i, r);
}

void main() {
	auto hesapla = function (size_t düzey) {
		return düzey ? düzey + düzey * hesapla(düzey - 1) : 0;
	};

   ekranaYaz (hesapla, 40);
}

Yani tamamen isimsiz (anonymous) değil, hesapla adında bir prototype yaptığımı düşünüyorum...

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

February 16, 2012

hesapla'nın tanımlandığı tarafta sağda da bir hesapla geçiyor ve derleyici o henüz tanımlanmış olmadığı için şikayet ediyor. (Tavuk/yumurta meselesi.)

hesapla'yı önce boş olarak tanımlamak ve sonra atamak işe yarıyor ama isimsiz işlevin hesapla isimli yerel değişkene erişebilmesi için de function değil, delegate olması gerekiyor:

import std.stdio;

void ekranaYaz(real delegate (size_t) y, short x) {
   int i;
   real r;
   for(i=0; i<x; i++) r = y(i);
   writefln("%s:\t%.0f", i, r);
}

void main() {
   real delegate(size_t) hesapla;
   hesapla = (size_t düzey) {
       return düzey ? düzey + düzey * hesapla(düzey - 1) : 0;
   };

   ekranaYaz (hesapla, 40);
}

Ali

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

1 2
Next ›   Last »