Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
Black_Knight

Kayıt: Oct 23, 2002 Mesajlar: 286 Nereden: İstanbul/İzmir
|
Tarih: Sun Jul 17, 2005 6:40 pm Mesaj konusu: atof() |
|
|
Arkadaslar su sizce neden olabilir?
float f = 0.0f;
char szBuffer[10] = "20.2";
f = atof(szBuffer);
printf("%f",f);
Bunu yapinca aldigim cikti su oluyor.
20.200001
Baska rakamlarda da sona bir ekliyor yada bir azaltiyor? |
|
Başa dön |
|
 |
vmeydaneri

Kayıt: Dec 08, 2004 Mesajlar: 583 Nereden: Ankara
|
Tarih: Sun Jul 17, 2005 6:52 pm Mesaj konusu: |
|
|
double atof(char *);
acaba atof un sonucu double oldugu icin olmasin?
sadece bir tahmin.Soyle dene birde
float f = 0.0f;
char szBuffer[10] = "20.2";
f = (float)atof(szBuffer);
printf("%f",f); |
|
Başa dön |
|
 |
vmeydaneri

Kayıt: Dec 08, 2004 Mesajlar: 583 Nereden: Ankara
|
Tarih: Sun Jul 17, 2005 6:56 pm Mesaj konusu: |
|
|
ha bu arada az once ilk gonderdigini denedim ve cikan sonuc:
20.200000 |
|
Başa dön |
|
 |
vmeydaneri

Kayıt: Dec 08, 2004 Mesajlar: 583 Nereden: Ankara
|
Tarih: Sun Jul 17, 2005 7:06 pm Mesaj konusu: |
|
|
himm az once win32 uygulamasinda
sprintf(..) ile yazdirdim sonuc : 20.200000
konsol uygulamasinda
printf(..) dedigimde senin dedigin gibi: 20.200001
cikti.
son olarak:
Kod: |
float f = 0.0f;
char szBuffer[10] = "20000.2";
char yaz[50];
f =atof(szBuffer);
printf("%f",f);
sonuc = 20000.199219
|
cikti. |
|
Başa dön |
|
 |
Black_Knight

Kayıt: Oct 23, 2002 Mesajlar: 286 Nereden: İstanbul/İzmir
|
Tarih: Sun Jul 17, 2005 7:17 pm Mesaj konusu: |
|
|
walla ben anlamadim bisi atof icinde bi hassalik sorunu mu var acaba kesirden sonra yazilani azicik azaltiyor yada buyutuyor.Garip bisi.
double ile denedim yine ayni oldu. |
|
Başa dön |
|
 |
DG

Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
|
Tarih: Sun Jul 17, 2005 9:24 pm Mesaj konusu: |
|
|
Bu; en temelde FPU'nun kesirli sayı matematiğini nasıl yaptığı ile ilgili olması gerek. Yani bize programcılık mantığı olarak öğretilen "iki kesirliyi == ile karşılaştırmayın, sadece aralarındaki mutlak farkı x gibi bir sayı ile karşılaştırın" olayı. Yani o yüzden kimisinde ,200000 kimisinde 200001 |
|
Başa dön |
|
 |
BabaCONDA

Kayıt: Jun 12, 2005 Mesajlar: 58 Nereden: İstanbul
|
Tarih: Sun Jul 17, 2005 9:32 pm Mesaj konusu: |
|
|
Black_Knight dostum, derleyicinin ayarlarına bir baksan gerçek sayı(floating point) için ayar vardır. Onu bir karıştırsan . Şuan önümde herhangi bir derleyici olmadığı için bişey söyleyemiyorum.
Veya senin atof sayıları getirirken yolda tekerleği patlatmış olmasın.  |
|
Başa dön |
|
 |
DG

Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
|
Tarih: Sun Jul 17, 2005 9:51 pm Mesaj konusu: |
|
|
wiki'de neden bazı sayıları, en azından istediğimiz gibi, tanımlayamadığımız hakkında özet bir bilgi var. Yani durum anormal değil. Aynı şekilde bende de oldu.
http://en.wikipedia.org/wiki/Floating_point
Eğer bazı rasyonel sayıların ikilik düzende temsili yapılamıyorsa, derleyicinin bununla yapacak pek bir şeyi olmasa gerek. Bence her halükarda kesin çözüm
gibi bir şeyler yapmak. |
|
Başa dön |
|
 |
leblebi

Kayıt: Jan 05, 2004 Mesajlar: 127 Nereden: q3dm17
|
Tarih: Mon Jul 18, 2005 12:48 am Mesaj konusu: ... |
|
|
DG'nin dedigi dogrudur. |
|
Başa dön |
|
 |
BabaCONDA

Kayıt: Jun 12, 2005 Mesajlar: 58 Nereden: İstanbul
|
Tarih: Mon Jul 18, 2005 11:52 am Mesaj konusu: |
|
|
Evet arkadaşlar böyle sorunlar kayan noktalı sayılarda v.s. 'de var. VC++ kullanan arkadaşlara Intel'in derleyicisini tavsiye ederim. zira bu tip data kayıpları v.s. gibi şeylerin asm kodlarıyla yapılması için uyarıyor.
K.G.... |
|
Başa dön |
|
 |
lucifer

Kayıt: Nov 02, 2002 Mesajlar: 215 Nereden: Istanbool
|
Tarih: Mon Jul 18, 2005 1:44 pm Mesaj konusu: |
|
|
Alıntı: |
zira bu tip data kayıpları v.s. gibi şeylerin asm kodlarıyla yapılması için uyarıyor. |
Hmm. Evet. Artik data kayiplarimi asm ile kodlayacagim. |
|
Başa dön |
|
 |
DG

Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
|
Tarih: Mon Jul 18, 2005 2:00 pm Mesaj konusu: |
|
|
BabaCONDA demiş ki: |
Evet arkadaşlar böyle sorunlar kayan noktalı sayılarda v.s. 'de var. VC++ kullanan arkadaşlara Intel'in derleyicisini tavsiye ederim. zira bu tip data kayıpları v.s. gibi şeylerin asm kodlarıyla yapılması için uyarıyor.
K.G.... |
ASM değil ÖSYM gelse ona bir şey yapamaz. Dillerle değil işlemcinin işleyişiyle ilgili bir şey. Lütfen yazılan şeyleri biraz oku.
Elde sınırlı sayıda {0, 1} var ama R kümesi sonsuz. Aynı şey tamsayılar için de geçerli. Long Long çok büyük bir veri tipi olup pratikte çoğu kişinin tamsayı ihtiyacını karşılasa da bir sınırı var. Neden sence 32-bit'lik işlemcin en çok 4GB Ram adresleyebiliyor (Hileler veya standartların dışına çıkmak olasıdır. 16 bitlik işlemciler zamanında iki register bir arada kullanılarak 2^16'dan büyük adresleme yapılmış ama biraz zorlama bir yaklaşım) |
|
Başa dön |
|
 |
BabaCONDA

Kayıt: Jun 12, 2005 Mesajlar: 58 Nereden: İstanbul
|
Tarih: Mon Jul 18, 2005 2:37 pm Mesaj konusu: |
|
|
dostum hele sen bir Intel'i kullan bana hak verecen.
İşlemcilerle alakalı diyosan alt bi tane AMD üzerinde FPU su var.
Ne diyim başka.
K.G....  |
|
Başa dön |
|
 |
DG

Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
|
Tarih: Mon Jul 18, 2005 3:09 pm Mesaj konusu: |
|
|
BabaCONDA demiş ki: |
dostum hele sen bir Intel'i kullan bana hak verecen.
İşlemcilerle alakalı diyosan alt bi tane AMD üzerinde FPU su var.
Ne diyim başka.
K.G....  |
Olayın Intel'le, AMD'yle, C'yle, C++'yla, CPU'yla, FPU'yla alakası yok. Hesaplama teorisi ile alakası var. Bırak Intel'in CPU'larını Emotion Engine'e koysan yine de R'nin bir alt kümesi temsil edilebilir. Sınırlı olan bir şeyle sınırsızın tamamını nasıl temsil edeceksin. Yani Intel'in derleyicisini kullanırsam gönül rahatlığıyla iki kesirli sayıyı == operatoru ile test edebileceğim öyle mi?
YOK ÖYLE BİR ŞEY
. |
|
Başa dön |
|
 |
BabaCONDA

Kayıt: Jun 12, 2005 Mesajlar: 58 Nereden: İstanbul
|
Tarih: Mon Jul 18, 2005 3:35 pm Mesaj konusu: |
|
|
değerli dostum ben Intel pazarlayıcısı değilim. Sana söylediğim tek şey böyle, kesirli, kayan noktalı v.s. gibi sonucu normal matematikle bile izah edilemeyen bazı kavramları, Intel derleyicisi tespit edebiliyor. Sende ona göre akıllı asm kodu yazıyorsun.
Anlamıyormuş numarası mı yapğıyorsunuz dalgamı geçiyorsunuz belli değil.
K.G.... |
|
Başa dön |
|
 |
|