String to Float veya Float to String fonksiyonlarını kendimiz nasıl yazarız?

Başlatan strom, 03 Şubat 2011, 09:48:24

strom

Herkese kolay gelsin.
Standart C fonksiyonlarını kendim yazmaya çalışıyorum.Şimdilik ufak tefek işlemleri yapıyorum ancak başlıktaki konuda resmen tıkandım.İlerleme kaydedemiyorum.Bilgilerim yetersiz kalıyor.İnternette nasıl yapıldığına dair araştırmalar yapıyorum ama malesef amacıma uygun sonuçlar buamıyorum.Hep hazır fonksiyonlar çıkıyor karşıma.Acaba bu işlemin nasıl yapıldığına dair bildiğiniz kaynaklar var mı?Her türlü yardıma açığım
Şimdiden teşekkürler

z

Burada kafani karistiran ne?

String to float icin konusursak;

String icerigi olan her bir karakterin 0...9 +/- ve . harici karakter icerip icermedigi testini yapacaksin. Iceriyorsa hata mesaji
Bu karakterler okey ise dizilimde hata varmi diye bakacaksin. ornegin 9.99.45-34 gibi durumlarda da hata verdireceksin.
(Eger string zaten mantis ve exponent degerlerini de iceriyorsa bunlari cekeceksin.)

Dizilim tamamsa strindeki sayida noktanin pozisyonunu sayacaksin. Stringedeki sayiyi nokta yokmus gibi integer yada long degere yada hangi uzunlukta istiyorsa o uzunluga cevireceksin. En son olarak da nokta pozisyonunu da goz onune alarak normalize edip  mantis ve exponent degerlerini olusturacaksin.

Sadece float sayi formatini bilmen gerekiyor. Bunu bildikten sonra gerisi senin kodlama yetenegine kalmis.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

strom

Hocam zamanında baya kafa yormuştum.Ancak bir türlü becerememiştim.Sanırım programcılık bilgimin yetersizliğinden olsa gerek.Çünkü hiçte basit gelmemişti bana :) Bir örnek inceleme şansım olsa çok güzel olur ama yinede floating sayıların yapısını tekrardan gözden geçirecem.

z

Ornek muhakkak bulursun ama ornek kisa bir sey olmayacagindan anlamak da zor gelecektir. Cunku yapilmasi gereken bir suru kontrol var. Floating point hesaplama zamaninda kafayi taktigim ve dokuman yetersizliginden dolayi en az iki senemi calan bir konu. Kafanfaki zorluklarin neler oldugunu cok iyi tahmin ediyoyorum.

Inan bana bu konuyu zaten biliyorsun. Kendine guven ve kodlamaya basla. ilk basta stringde gelen deger sayisal bir degermi yoksa hatali bir degermi kontrolunu yapacak fonksiyonu yaz gerisi corap sokugu gibi gelir. Eger asm calismiyorsan zaten is cocuk oyuncagi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

eseneren

Lcd string fonksiyonunu edit ettim bunalmıs dedıgı gıbı hatalı karakterı tesbıt etmek ıcın kabaca yazdım nerede takıldın aklını karıstıran nedır.?

void lcd_string(const char *str)		// LCD'ye string ifade gönderiliyor
{
	while(*str)							
	{	
         	sayi[i]=*str;
                if(sayi[*str]>'0')&&(sayi[*str]<'9')&&(sayi[*str]==',')
                i++;					
		*str++;
                hata();
	}
}//
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

strom

@bunalmis
Dediğiniz gibi başlayacam ve bu sefer yapmadan bırakmayacam inş.Bu arada Gerbay hocamın verdiği örnekleri incelerken farkettim ki ben aslında asm'de yazmak istiyor muşum.Nese herşey sırayla :)

@Gerbay
Hocam çok teşekkür ederim.Yıllardır aradığım kaynakları vermişsiniz desem abartmış olmam.Tam bu hevesimden vazgeçmek üzereyken yeniden heveslendim :)

@eseneren
Bunalmis hocanın kastettiği şey farklıydı sanırım.İşlerin adım adım yapıldığında zor olmayacağını , basitçe bir stringn float olup olmadığını tanımlamakla  başlanabileceğini söylemek istedi sanırım.

Burak B

ASM dönüşümler için MASM32 nin kütüphanesine bakabilirsin.

www.movsd.com - MASM32.LIB kaynak kodlarıda orda mevcuttur ;)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle