Bir text dosyadaki verileri C'de işlemem gerekiyor. Bu amaçla dosyayı açıp değişkenleri okuduğum zaman değişkenin noktadan sonraki kısmında sorun yaşıyorum. Örneğin float verileri içeren dosyada
Float tipinin duyarlılığının yetmediğini düşünerek bu kez verileri double formatında dosyaya yazdım. Bu kez double formatında okuduğum veriler tamamen anlamsızdı.
Program kodunu aşağıda veriyorum. Özellikle double tipi ile ilgili sorunun nerden kaynaklandığı konusunda yardımcı olursanız sevinirim.
Not: Veriler dosyada aralarında bir boşluk karakteri ile bulunuyor. "7992.504285 2.988834 9206.547066 1591.434319" , "4.801184e+002 4.357349e+003 5.415224e+003 2.415224e+003" gibi
arkadaşım eğer dosyadaki bilgilerin üzerinde matematiksel işlem yapmıyacaksan ve amacın onları göstermekk ise dosyadan string formatında al bu fonksiyonu kullana bilirsin
char *fgets(char *str, int num, FILE *fp);
daha sonrada aldığın gibi ekrana yazdır
ama eğer matematiksel işlemler yapmayı düşünüyorsan fscanf in içinde %e yerine %f kullan, hatta %4.6f olarak kullan belki düzelir veya string olarak aldığın sayıları daha sonra sayıya çevir.
NewVatoo: Bahsettiğin biçimli okumayı denemiştim ancak o da olmuyor. Sayılarla matamatiksel işlemler yapacağımdan doğrudan double değişkenlere okumam lazım ve veri miktarı çok fazla. Yani string sayı dönüşümü ile vakit kaybetmemem gerekiyor.
float f1=7992.504285 yapıp bunu printf ile gösterdiğimde bile sonuç farklı oluyor (7992.504395). Sanırım sorun float tipinde. Ve kısmen anladım gibi.
IEEE standardına göre 4-baytlık float tip bit tanımlaması şöyle
31-30 bit aralığı (1bit) : işaret biti 30-23 bit aralığı (8bit) : üs 0-22 bit aralığı (23bit) : noktalı kısım.
Girdiğim sayıların tam sayı ve virgüllü kısmı 22-biti aşınca sorun çıkıyor. Üstteki sayının tam kısmı 13 bitlik yer kaplıyor. Noktadan sonraki kısımda değişim (hata) 10. bitte başlıyor. Yani veri ayrılan 22-bitlik kısmı aşıyor. Yani float tipi 3.4E+308 e kadar verileri saklayabiliyor ancak sayının tam kısmı büyüdükçe noktadan sonraki kısımda hassasiyet azalıyor.
Bu post'u daha sonra birileri bu sorunla karşılaşırsa diye bilgi amaçlı yazdım.
7992.504285 2.988834 9206.547066 verileri varken değişkenlerde
7992.504395 2.988834 9206.546875 verieri oluyor.
Float tipinin duyarlılığının yetmediğini düşünerek bu kez verileri double formatında dosyaya yazdım. Bu kez double formatında okuduğum veriler tamamen anlamsızdı.
Program kodunu aşağıda veriyorum. Özellikle double tipi ile ilgili sorunun nerden kaynaklandığı konusunda yardımcı olursanız sevinirim.
Not: Veriler dosyada aralarında bir boşluk karakteri ile bulunuyor. "7992.504285 2.988834 9206.547066 1591.434319" , "4.801184e+002 4.357349e+003 5.415224e+003 2.415224e+003" gibi
Edit: Verilerin dosyada bulunma biçimi hk.
< Bu mesaj bu kişi tarafından değiştirildi HYP -- 16 Ekim 2005, 0:30:04 >