Jump to page: 1 2
Thread overview
December 26, 2012

Python da çok büyük matematiksel işlemleri yaparken uzunluğun hiçbir önemi olmuyor ve çok hızlı bir şekilde hesaplama yapıyor. Bu nasıl oluyor?

Ve Bitwise Left shift ve Right shift diye bir şeyler varmış. Bunlarla birşeyler yapmak mümkün müdür?

Teşekkürler.

Zekeriya.

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

December 26, 2012

Bigint ile ilgili sıkıntı 12.2 * 42 gibi bir işlemi yapamaması.

Şu an için dilde hızla ilgili problemler var ve bunun başında matematiksel işlemler geliyor.

Zekeriya

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

December 26, 2012

Alıntı (zekeriyadurmus):

>

çok büyük matematiksel işlemleri

Büyük işlem derken eğer değerlerin büyüklüğünü kastediyorsan bunlar "bigint" denen veri yapıları ile sağlanır. D'de de var:

http://dlang.org/phobos/std_bigint.html

Alıntı:

>

çok hızlı bir şekilde hesaplama yapıyor.

Hızlı ama temel türlerle karşılaştırıldığında yavaş.

Alıntı:

>

Bu nasıl oluyor?

Sayıyı birden fazla değişkenle ifade ediyorlar. Örneğin, 128 bitlik bir sayı üst ve alt bitleri olarak iki 64 bitlik değişkenle ifade edilebilir.

Alıntı:

>

Ve Bitwise Left shift ve Right shift diye bir şeyler varmış. Bunlarla birşeyler yapmak mümkün müdür?

O işleçler değişkenlerin her biti ile oynamayı sağlarlar. Benim bildiklerim şurada: :)

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

Ali

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

December 26, 2012

Anladım çok teşekkür ederim umarım en kısa zamanda çıkar.

Şu anda real kullanıyorum ama realin ne farkı var?

Zekeriya

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

December 26, 2012

Onun için de BigFloat var ama henüz Phobos'a eklenmedi. En son duyduğuma göre %95 tamammış:

http://forum.dlang.org/thread/cyriexbewfixehzrkzku@forum.dlang.org#post-mailman.711.1349879572.5162.digitalmars-d-learn:40puremagic.com

Ali

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

December 27, 2012

BigFloat çıkana kadar real ile idare edeceğiz o zaman :)

Teşekkürler :)

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

December 26, 2012

Hiç BigFloat türü kullanmadım ama temel türlerin kısıtlamaları bulunmadığını tahmin ederim. real benim ortamımda şöyle:

import std.stdio;

void main()
{
   writeln("Duyarlık                 : ", real.dig);
   writeln("En küçük normalize değeri: ", real.min_normal);
   writeln("En büyük değeri          : ", real.max);
}

Çıktısı:

'Duyarlık : 18
En küçük normalize değeri: 3.3621e-4932
En büyük değeri : 1.18973e+4932
'
Örneğin, aşağıdaki iki real değer bize farklı görünsede bilgisayarın gözünde eşitler:

   assert(10_000_000_000_000_000_000.0L
          ==
          10_000_000_000_000_000_000.1L);    // virgülden sonrası farklı

İşte BigFloat'un bu gibi kısıtlamaları yoktur.

Ali

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

December 28, 2012

Başka bir alternatif de var! Kendi kütüphaneni yazabilirsin...:)

Bakın Allah'ın işine ki yukarıdaki tartışmayı okurken, tam da Apple Open Source kodlarına bakıyordum...
Örneğin şuna: http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-60026/Source/API/CommonBigNum.c

Sık sık buradaki kodlara bakıyor (çalma değil!) kendimce modellemeler yapıyorum. Amacım tekerleği tekrar icad etmek değil ama daha pürüzsüz yapmak isterdim. Tabi anlam veremediğim şeyleri anlayabilirsem...

Bakınız; şuradaki kodlamanın yararını (değerin dönüş şeklini) anlayabildiniz mi? Aşağıdaki kod, yukarıda verdiğim bağlantıdan alıntılandı:

CCStatus
CCBigNumSquare(CCBigNumRef res, const CCBigNumRef a)
{
   CC_DEBUG_LOG(ASL_LEVEL_ERR, "Entering\n");
   ccz_sqr(res, a);
   return kCCSuccess;
}

Aşağı yukarı tüm işlevler yukarıdakine benzer biçimde ve kCCSuccess değişkenin (CCSstatus yapısını) döndürüyor. Herhalde ccz_sqr() işlevi, sonucu oraya yazmakta. Tabi C kodu olduğu için belli olanaklar kısıtlı olduğu için böyle yapılmış olabilir. Ama neden işaretçi kullanmadıklarını anlayamadım ve izini sürmek istesem de çekirdeğe (göya open source!) erişemedim:
Alıntı:

>
> #include <corecrypto/ccz.h>
> #include <corecrypto/ccn.h> /* For ccn_sizeof(). */
> #include <corecrypto/cc_priv.h> /* For CC_LOAD32_BE. */
> ```

>
Aslında Apple'ın kodlama tarzını beğeniyorum. Örneğin işlevlerin hangi kütüphaneden çağrıldığını öndeki takıdan (yukarıda ccz.h) anlayabiliyoruz. Malumunuz proje büyüdükçe (gerçi Eclipse gibi akıllı IDE'ler mevcut) neyin nerede olduğun, nereden çağrıldığı tam bir karmaşa olabilir...:)

Ancak kodları çok ilkel buluyorum. Bilemiyorum, belki ilkellik sağlamlığı ve sadeliği getiriyor olabilir. Tıpkı yukarıdaki sade işlev gibi. Önce loglama (Türkçesi ne olabilir?) yapıyor, sonra hesaplama: Basit...

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

Alıntı:

>

Başka bir alternatif de var! Kendi kütüphaneni yazabilirsin...

Evet haklısınız ileride inşallah o da olacak ama önce iyice d öğrenmem gerektiğine inanıyorum.

Şimdilik olduğu kadar böyle devam edeceğiz artık. Ama d dilinin özelliklerini keşfettikçe bir kez daha hayran kalıyorum her defasında python'ı pek aramıyorum bile artık :)

D ile ilgili tek sıkıntı sadece çok popüler olmaması ama inşallah o da zamanla olacak :)

Zekeriya

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

December 28, 2012

Alıntı (acehreli):

>

Bence kCCSuccess bir enum değeri (veya sabit) ve büyük olasılıkla da 0. Gösterge büyük olasılıkla CCBigNumRef tanımının içinde gizli.
Evet, başka yerde (http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-36064/CommonCrypto/CommonCryptor.h) buldum. O bir enum sabiti ve değeri 0 imiş...

enum {
	kCCSuccess		= 0,
	kCCParamError		= -4300,
	kCCBufferTooSmall	= -4301,
	kCCMemoryFailure	= -4302,
	kCCAlignmentError	= -4303,
	kCCDecodeError	= -4304,
	kCCUnimplemented	= -4305
};

Yine de çok anlamsız çünkü hesaplamanın yapıldığı bilgisini vermiyor. Neden şöyle yapılmamış ki!

..
   return ccz_sqr(res, a);
..

Gelin biraz da C'den uzaklaşıp D konuşalım...:)

Bu kodu D'de yazsaydık sanırım scope() kullanarak işlevde neler olup bittiği hakkında daha iyi bir log'lama elde edebilirdik...:)

{
   CC_DEBUG_LOG(ASL_LEVEL_ERR, "Entering\n");

   scope(success) CC_DEBUG_LOG(ASL_LEVEL_ERR, "Exiting\n");
   scope(failure) CC_DEBUG_LOG(ASL_LEVEL_ERR, "Failure\n");

   return ccz_sqr(res, a);
}

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

« First   ‹ Prev
1 2