FLOAT sayı artırma azaltma

Başlatan fofo, 22 Ağustos 2014, 19:30:40

fofo

Merhaba  FLOAT tipindeki bir sayıyı  virgülden sonraki kısmını artırıp azaltmak istiyorum. Bunu nasıl  yapabilirim. Aşağıdaki gibi yapınca virgülden sonraki sayılar istediğim gibi artıp azalmıyor. artma miktarı 0.025 olacak
örnek
DIM sayi as FLOAT
sayi=100.0000


if PORTB.0=0 then
sayi=sayi+0.025
endif

Maxim

bir sorun yok, artıyor güzelce?

VERI=100.000
VERI=100.025
VERI=100.050
VERI=100.075
VERI=100.100
VERI=100.125
VERI=100.150
VERI=100.175
VERI=100.200
VERI=100.225
VERI=100.250
VERI=100.275
VERI=100.300
VERI=100.325
VERI=100.350
VERI=100.375
VERI=100.400
VERI=100.425
VERI=100.450
VERI=100.475
VERI=100.500
VERI=100.525
VERI=100.550
VERI=100.575
VERI=100.600
VERI=100.625
VERI=100.650
VERI=100.675
VERI=100.700
VERI=100.725
VERI=100.750
VERI=100.775
VERI=100.800
VERI=100.825
VERI=100.850
VERI=100.875
VERI=100.900
VERI=100.925
VERI=100.950
VERI=100.975
VERI=101.000
VERI=101.025
VERI=101.050
VERI=101.075
VERI=101.100
VERI=101.125

Gökhan BEKEN

Buton okuma böyle yapılmaz:
if PORTB.0=0 then
sayi=sayi+0.025
endif


forumda aratırsanız, buton okuma hakkında tüyolar çok.
Özel mesaj okumuyorum, lütfen göndermeyin.

fofo

Maalesef o şekilde artmıyor virgülden sonraki sayılar 1 eksik şekilde artıyor.   100.024 gibi

Maxim

o zaman sorun sizde
bende gayet güzel ve problemsiz.
proton version 3.5.6.7

Dim sayi As Float
sayi=100.0000

loop:
HRSOut "VERI=", Dec3 sayi,13,10
sayi=sayi+0.025
GoTo loop

Tagli

Bu normal. Aslında 100.024 değil, belki de 100.024998 gibi bir şey oluyordur. Kayar noktalı sayılarda belli bir hassasiyet vardır. Onluk sistemde düşündüğümüz her sayıyı ifade edemezler. Sayının kaç bit ile ifade edildiği de bu hassasiyette etkilidir.

Maxim'in son iletisini yeni gördüm. Sorun derleyici ile ilgili olabilir. Belki bir bug vardı ve sonradan düzelttiler. Gösterim sırasındaki yuvarlama seçeneklerinde de farklılık olabilir.
Gökçe Tağlıoğlu

fofo

#6
proton version 3.5.6.7 nereden indirebilirim? Bendeki versiyon 3.5.5.5

Maxim

tagli yazınca uyandım

koduna şu satırları ekleyip tekrar denermisin?

DIM sayi as FLOAT
sayi=100.0000

if PORTB.0=0 then

Float_Rounding = Off
sayi=sayi+0.025
Float_Rounding = On

endif

fofo

Float_Rounding = Off
Float_Rounding = On
bu komutlarda derleyici hata veriyor.

Maxim

son kez bu şekilde deneyin
olmaz ise derleyici versiyon sorunu çünkü bende problem yok

declare Float_Rounding = Off
sayi=sayi+0.025
declare Float_Rounding = On

fofo

hata vermedi ama sonuçta değişmedi.

Tagli

fofo sen sonucu nerede kontrol ediyorsun? Aslında bence Maxim'de de durum aynı ama HRSOut komutu sonucu yuvarlayarak çıkartıyor.
Gökçe Tağlıoğlu

fofo

Ben sonucu deneme kartından datayı bilgisayara gönderek hemde kart üzerindeki LCD den kontrol ediyorum.

Maxim


fofo

O zaman hata  bendeki versiyondan  kaynaklı, Proton' un yeni versiyonunu nereden indirebilirim.