ondalık sayı işlemi

Başlatan bigbey, 01 Eylül 2005, 17:53:16

bigbey

Arkadaşlar benim sayılarla sıkıntım var.
1/1000000 gibi bir işlem yaptırmak istiyorum.
sonuç olarak:0,000001 saysını elde etmek istiyorum.
Ayrıca virgülden sonra iki basamaklı sayılarla dört işlem yapabilmek istiyorum. Örnek A=15,34....  B=12,22  c=a/b  sonuç=1,25 olacak şekilde.
Emek edip yardım eden arkadaşlara şimdiden teşekkür ederim.

bu işlem picbasic veya mplab editöründen biri için olabilir
TA6R

cnt

ekteki dosyayı bi kontrol et, basic için isine yarıyacaktır.

ama nasıl kullanıldığını bana sorma, hiç kullanmadım  :)

http://rapidshare.de/files/4630434/FLOATING_POINT_ROUTINES_for_pbp.zip.html

argeci

selamün aleyküm kullandığın işlemciyi söylemişsin ama floting pointle çalışmak fazlaca bellek ve kalabalık işlem yükü getirir ve zaman alır bu noktalarda problemim yok benim işlemci sadece onu yapacak dersen arkadaşın önerdiği yöntem iyi ama bi çok işlem arasında bu matematik işlemini yapacaksan normal yazılarda çalış derim yani 16 yada 32 bit saıları kullan sen işlemleri scale et yani 1/2 0,5 ise sen o sanıları onla çarp 10/2=5 olsun sonra sen bu 5 i 0,5 olarak kabul et bu daha hızlı bi çözüm getirir pic de zorlamaz virgülden sonra 2 basamak istern bölümü 100 le çarparsın en son tam yazı sonucuda 0,xx şeklinde kabul edersin.
esselamü aleyküm ve rahmetüllahi ve berekatühü Allahın selamı rahmeti bereketi hepinizin ve hepimizin üzerine olsun

bigbey

Cevap yazan arkadaşlara teşekkürler.
Floatingpoint dosyalarını bende aldım ama nasıl kullanılacağı hakkında çalışmam oldu fakat elimde bulunan A ve B sayıları ikiside virgüllü sayı
bu sayılar herzaman değişken olarak kullanılıyor.
Kısaca bir yerde analog gerilim ölçüyorum. ve direnç değerini buluyorum.
sonra bu direnç değerinden iletkenlik hesabı yapıyorum.
bu nedenle kullandığım sayılar buyük değerler.
yani 1.000.000 gibi bu nedenle bu digitteki sayıda birde 1/x olarak işlem yapınca durumu anlarsınız.
TA6R

argeci

selamün aleyküm sen gene float kullan ama 1/1000000 olması sorun değil 32 bitlik bir sayı 4 milyara kadar gidiyor picin gücü veya hafıza yetiyosa zaman problemin yoksa sorun ama emin olki 32bitlik bir toplama ve çıkarma floatin point işlemlerin çok altında bellek ve güç ister birde sayı float olunca karşılaştırma if leride float olur bunuda unutma yani if float a demek sayı ifinden çok fazla yer kaplar sen gene float kullan ben bilgilendirmek içi söyleyim dedim
esselamü aleyküm ve rahmetüllahi ve berekatühü Allahın selamı rahmeti bereketi hepinizin ve hepimizin üzerine olsun

bigbey

arkadaşlar ben örnek bir yazılım arıyorum.
3,5/2,3= ? gibi işlem yapabilen bir örnek.
TA6R

mhk

Sevgili Bigbey. 3,5/2,3=1,521739130434782608695652173913  herhalde sen bunun hepsini istemiyorsundur. ;)  bu işlemi mikroişlemci açısından değerlendirelim. 3,5*10/2,3*10 halini alsın. Yani 35/23 sonuç integer tipinde "1" dir. 35 in 23'e bölümünden kalanı bulalım 35-23=12 bu değeri 10 ile çarpalım ( Çünkü 12/23 1den küçük bir değer çıkacağı için ) 120 tekrar 23'e bölelim 12*10/23="5" tam sayısı. 5*23=115 ,Kalan 120-115 =5, Bak dikkat ettiysen virgülden sonraki (1,5) 5 rakamını elde ettik. Biraz daha devam edelim. Kalan 5 'ti 5*10/23 ="2" tam sayı, (  1,52 oldu ) Tırnak içindeki rakamlara dikkat et. İlk bulduğumuz değerler çıkıyor.Devam edelim, 23*2=46   Kalan 50-46=4  4*10/23="1" tam sayı, 1*23=23  40-23=17   17*10/23="7" tam sayısı vs vs. diye devam eder gider. Şimdi tırnak içindeki sayıları yan yana yazalım.15217 burda dikkat edilmesi gereken virgül nereye konacak. Bunun için ilk başta karşılaştırma yapılacak. 3,5 mi büyük 2,3 mü? 10 ile çarparsak ( 10 ile çarpmamızın nedeni sayıyı virgülden kurtarmak) 35 ve 23 gibi iki sayı çıkar. Eğer bölünen(35)  bölenden(23)  büyükse ve içinde 1 tane bölen (23) varsa 1, şeklinde 2 tane varsa 2, şeklinde 3 tane varsa 3, şeklinde yazdırılır( mikroişlemciye). Bundan sonra mikroişlemci kalan hesaplama , büyük küçük karşılaştırma işlemlerini yapıp sonuca ulaşmalı. Mikroişlemcide , matematiksel işlemler int tipinde yapıldığı için.Bizim ondalik sayıları int tipi gibi kullanarak işlem yaptırmamız gerekiyor. Bir örnek daha yapalım. 0,5/20=? 0,5*10=5  20*10=200  5/200 dür. Şimdi karşılaştıralım. 5 , 200 den küçük dolayısıyla 5' i 10 ile çarpalım sonuca "0," diyerek başlayalım. 5*10=50  200'den küçük "0,0" diyelim. 50'yi 10 ile çarpalım 50*10=500  200 'den büyük.Şimdi hesap edelim. 500/200="2" tam sayısı sonuca doğru "0,02" 2*200=400, 500-400=100 ( Kalan ) 100/200 100 , 200 den küçük 10 ile çarp 1000/200="5" Kalan sıfırdır. SONUÇ=> 0,5/20 =0,025 tir. Bunu mikroişlemciye yaptırabilirsin. Kolay gelsin.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

bigbey

Sayın MHK,
Verdiğin bilgiye çok teşekkür ederim.

arkadaşlar konuyla ilgilenen herkese çok teşekkür ederim.
Verilen cevaplar çok tatmin edici. Benim sormak istediğim,
Bu işlemi gerçekleştiren bir makro veya hazır bir paket yazılım varmı diye.
Hani Floating point.bas var ya  onun gibi. Floating.bas' da tamsayı giriyorsun.ben biraz daha hazır (armut piş ağzıma düş) alt program aramıştım.
çok güzel bir açıklama ile olay tamamlanmıştır.
Şimdi bir konu başlığı daha açacağım. Bu da bir sayını KAREKÖKÜNÜ bulmak.
tabiki virgüllü olarak. Bu konuyu tüm arkadaşlara bilgi tazeleme egzersiz olarak sunuyorum.
TA6R