Delphi Can

Orjinalini görmek için tıklayınız: MSSQL Server Hakkında Bilmek İstedikleriniz
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3
Merhabalar

Arkadaşlar MSSQL hakkında merak ettiğiniz her türlü sorunuzu alabilirim. Elimden geldiğince sizlere yardımcı olmaya çalışacağım
(21-12-2016, Saat: 15:55)esrehmaan Adlı Kullanıcıdan Alıntı: [ -> ]Merhabalar

Arkadaşlar MSSQL hakkında merak ettiğiniz her türlü sorunuzu alabilirim. Elimden geldiğince sizlere yardımcı olmaya çalışacağım

MySQL ile ne farkı var en ayırıcı özelliği nedir, hangi duruma göre hangisini seçelim.
Delphi de (TAM SAYI / TAM SAYI) ondalık sonuç döndürebiliyor..
MSSQL neden bunu yapamıyor ?

Dipçe; 1 saatimi yemişti bu saçmalık..
(22-12-2016, Saat: 02:54)barutali Adlı Kullanıcıdan Alıntı: [ -> ]Delphi de (TAM SAYI / TAM SAYI) ondalık sonuç döndürebiliyor..
MSSQL neden bunu yapamıyor ?

Dipçe; 1 saatimi yemişti bu saçmalık..

(TAM SAYI / TAM SAYI) örnek; 5/3=1,66666667 bu bir matematik kuralıdır.
MSSQL neden bunu yapamıyor ? Bilimsel kurallar Microsoft'u pek bağlamıyor. Kendi kurallarını koyuyor.
Bu arada Türkçe kullanım hassasiyetinizden dolayı tebrik ederim. (Dipçe;)
(22-12-2016, Saat: 08:36)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: [ -> ]
(22-12-2016, Saat: 02:54)barutali Adlı Kullanıcıdan Alıntı: [ -> ]Delphi de (TAM SAYI / TAM SAYI) ondalık sonuç döndürebiliyor..
MSSQL neden bunu yapamıyor ?

Dipçe; 1 saatimi yemişti bu saçmalık..

(TAM SAYI / TAM SAYI) örnek; 5/3=1,66666667 bu bir matematik kuralıdır.
MSSQL neden bunu yapamıyor ? Bilimsel kurallar Microsoft'u pek bağlamıyor. Kendi kurallarını koyuyor.
Bu arada Türkçe kullanım hassasiyetinizden dolayı tebrik ederim. (Dipçe;)

Merhaba,

TAM SAYI / TAM SAYI işleminin sonucu TAM SAYI'dır. Bu aslında bilimsel olarak da böyledir. Tam sayılar kümesinde yapılan işlemlerin hepsinin sonucu tam sayıdır. Eğer sonuç noktalı sayı olursa (FLOAT, DOUBLE, DECIMAL vs) derleyici sizin yerinize veri tipi değiştirmiş demektir. Veri tipi değiştirme, optimizasyon gibi sonucu değiştirmeyen bir işlem değildir ve hatta tam tersi programı yavaşlatan bir değişikliktir.

İyi çalışmalar
(22-12-2016, Saat: 16:01)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: [ -> ]
(22-12-2016, Saat: 08:36)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: [ -> ](TAM SAYI / TAM SAYI) örnek; 5/3=1,66666667 bu bir matematik kuralıdır.
MSSQL neden bunu yapamıyor ? Bilimsel kurallar Microsoft'u pek bağlamıyor. Kendi kurallarını koyuyor.
Bu arada Türkçe kullanım hassasiyetinizden dolayı tebrik ederim. (Dipçe;)

Merhaba,

TAM SAYI / TAM SAYI işleminin sonucu TAM SAYI'dır. Bu aslında bilimsel olarak da böyledir. Tam sayılar kümesinde yapılan işlemlerin hepsinin sonucu tam sayıdır. Eğer sonuç noktalı sayı olursa (FLOAT, DOUBLE, DECIMAL vs) derleyici sizin yerinize veri tipi değiştirmiş demektir. Veri tipi değiştirme, optimizasyon gibi sonucu değiştirmeyen bir işlem değildir ve hatta tam tersi programı yavaşlatan bir değişikliktir.

İyi çalışmalar


Açıkçası bu dediğiniz bilimsel gerçeği hiç duymadım..
Float, Double ve Decimal de yavaşlatma hiç yaşamadım fakat Currency de yavaşlama görmüştüm.. Özellikle CurrtoStr ve StrToCurr da ..
İşlemci komut bazında integer, float, double fark var. Bu veritabanında hıza ne kadar yansır?
Bahse konu bölme işlemindeki davranış aslında C dilinin davranışı.

x = y / z gibi bir matematiksel işlemde, x değişkeninin türü ne olur ise olsun; y ve z'nin bir tamsayı olması durumunda sonuç da tamsayı olacaktır. y ya da z değişkenlerinden birisi dahi gerçel sayı ise bu durumda sonuç ondalıklı olacaktır. Sonucun y ve z'nin tipinden bağımsız olarak, ondalıklı çıkmasını garanti altına almak istiyor iseniz; CAST ya da CONVERT metodlarını kullanabilirsiniz. Örneğin;

declare 
@x float,
@y int,
@z int

set @y = 1
set @z = 4

set @x = cast(@y as float) / cast(@z as float)

select @x

ya da daha basit bir şekilde aşağıdaki gibi bir kullanım da işe yarayacaktır:

declare 
 @x float,
@y int,
@z int

set @y = 1
set @z = 4

set @x = (@y * 1.0 / @z * 1.0)

select @x
(22-12-2016, Saat: 22:45)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: [ -> ]Bahse konu bölme işlemindeki davranış aslında C dilinin davranışı.

x = y / z gibi bir matematiksel işlemde, x değişkeninin türü ne olur ise olsun; y ve z'nin bir tamsayı olması durumunda sonuç da tamsayı olacaktır. y ya da z değişkenlerinden birisi dahi gerçel sayı ise bu durumda sonuç ondalıklı olacaktır. Sonucun y ve z'nin tipinden bağımsız olarak, ondalıklı çıkmasını garanti altına almak istiyor iseniz; CAST ya da CONVERT metodlarını kullanabilirsiniz. Örneğin;

declare 
@x float,
@y int,
@z int

set @y = 1
set @z = 4

set @x = cast(@y as float) / cast(@z as float)

select @x

ya da daha basit bir şekilde aşağıdaki gibi bir kullanım da işe yarayacaktır:

declare 
 @x float,
@y int,
@z int

set @y = 1
set @z = 4

set @x = (@y * 1.0 / @z * 1.0)

select @x

2. kullanım şekli ile çözmüştüm.. Peki hocam sizce Delphi' ın yaptığı mı doğru? Yoksa C nin mi ?
Ben bir Delphi sever olarak Delphi'nin yaptığı doğru demek isterdim. Ama mantıken baktığımızda, iki değişken (bölen ve bölünen) birer tamsayı ise bu durumda programcı tamsayı bir sonuç istiyordur diye düşünmek de bir yaklaşım aksini düşünmek de. Delphi akıllıca davranıp, her zaman altta programcıları yormayıp bir çok işi kendisi hallediyor. Ondalıklı sayı aritmetiği CPU için biraz zor bir aritmetiktir, bu bağlamda programcı bilerek ve isteyerek bu işi yapmıyacak ise bu işin default'unun C'nin yaptığı gibi olması gerekir kanaatini taşıyorum. Matematiksel olarak sonuc 1/4 için 0.25'dir evet ama 1 ve 4 birer tamsayı olarak tanımlandı ise performans adına sonucun 0 olması gerekir. Programcı ondalıklı sonuçlar arzuluyor ise her iki tarafıda ondalıklı bir veri tipi ile sarmalamalıdır ki derleyici en başta ilgili optimizasyonları yapabilsin.

 Ama Delphi bu, arka planda bütün pis işleri bizim için hallediverir Smile C/C++ gibi değil Wink C/C++'da bu iş için casting yapmanız icap eder. Doğrusu hangisi peki ? Bu sorunun yanıtı su götürür. İşlemci performansı için doğrusu C/C++'ın yaptığı gibi görünüyor.
Sayfalar: 1 2 3