Carp ve topla peki sonuc ne kadar dogru?

Mikro Step

Kıdemli Üye
Katılım
25 Eylül 2022
Mesajlar
4,306
Nasil yazacam/toparlayacagim bilmiyorum neyse kervan yolda duzelir.

8 bit icin konusalim.

A ve B pozitif ve bir den kucuk sayilar olsun.

A ve B, 8 bit ile yazilan sayisal degerler olsun. Bu durumda A>2^-9 ve B>2^-9 olacaktir.

Bir a ve b sayisi 8 bitle ifade edilmek istendiginde

a= A+/-DA ve
b=B+/-DB olarak yazilabilir.

Cogu A ve B icin DA ve DB sifir olamaz cunku bit uzunlugumuz belli.

X istedigimiz kadar uzun bit uzunluguyla yazilabilen bir degisken olduguna gore

X+a*b islemini yapmaya kalktigimizda bulacagimiz sonuc ne kadar dogrudur?
 
Son düzenleme:
hep bu konuları öğrenmek istemişimdir ama benim anlayabileceğim düzeyde bir anlatım bulamadım.
 
:D
8 bit: 0 ile 255 arasıdır "2^-9" olamaz.
 
Son düzenleme:
Mesela

a sayimiz 0.505859375 sayisi olsun.

Bu sayi 8 bitle ifade edilecek olursa A=0.50390625 dir

O halde

A=0.50390625
DA=0.001953125 dir.

a=A+DA

a=0.50390625 + 0.001953125 dir.
 
O notasyonda sayimizin gercek degerini ve bilgisayarda saklanan degerini gosterdim. Aradaki fark DA olarak gosterildi.

ikili sistemde bazi sayilar guzel saklaniyor bazilari bu kadar guzel saklanamiyor.

Mesela basimiza bela olan 1/3 sayisi 3lu sayi sisteminde 0.1 seklinde cok guzel saklanir.
 
O notasyonda sayimizin gercek degerini ve bilgisayarda saklanan degerini gosterdim. Aradaki fark DA olarak gosterildi.

ikili sistemde bazi sayilar guzel saklaniyor bazilari bu kadar guzel saklanamiyor.

Mesela basimiza bela olan 1/3 sayisi 3lu sayi sisteminde 0.1 seklinde cok guzel saklanir.
Hocam "+/-" ne demek oluyor. Bir de "A" 8 bitle yazılan sayısal değerken "DA"nın ne olduğunu anlamadım. Ders verecek vaktin de yoktur. Kaynağa işaret etsen Bu geceyi kurtarırım :) .
 
Ornek vererek aciklayayim. 4 bit ile pozitif ve 1 den kucuk sayilari ifade ederken

Kod:
1000 = 0.5             8/16
0100 = 0.25           4/16
0010 = 0.125         2/16
0001 = 0.0625       1/16

Peki 0.6 sayisini nasil yazacagiz.

ya 1000 yani + 0.1 hata ile yazacagiz
ya da 1010 yani -0.025 hata ile gosterecegiz.

O halde

0.6 sayisini 0.5 ile gosterirsem DA=0.1 yani 0.5 + 0.1
0.6 sayisini 0.625 olarak gosterirsem DA=-0.025 yani 0.6-0625=-0.025 olur.

DA normalde bilgisayar islemlerinde gorulmez cunku bit sayimiz az oldugu icin yazilamiyor.
Gorulmedigi icin de matematiksel bir hata yapmis oluyoruz.
 
mevzuyu çok anlamadım ama gösterdiğiniz koddan yola çıkarak şunu söyleyebilirim anladığım kadarıyla register ataması yapılıp bunun üzerinden işlem yapan bir sisteminiz var çünkü ikili sistemde 1000 =8 e eşittir 0.5 e hiçbir zaman eşit olmaz 1000 registerına 0.5 ataması yapılmış yani bu çağrılırsa veya burdan çıkış alınmak isterse değeri 0.5 olsun diyor. Atandığı vermesi gereken değere, bunu bilgisayarın klavyesinden herhangi bir tuşa bastığımızda kayıtlı registardaki ascii koduna eşitlenmesi gibi düşünebiliriz eğer istediğiniz değer bu kayıtlı sistem üzerinden ise iki registerdan aynı anda çıkış alınarak bu değerin birbirinden çıkarıldığı bir devre yapılabilir veya siz bu koddaki değerleri kendinize göre değiştirebilirsiniz
 
Anlasilan fix point sayilarla hic ugrasmamissin.

En basta ne demistim?

A ve B pozitif ve bir den kucuk sayilar olsun.

1000.0000 = 8.0
0000.1000 = 0.5

Tam sayi kullanmiyorsan, noktaya da ihtiyacin kalmaz bu durumda 1000 ikili sayisi 0.5 anlamina gelir.

Yani 8/16

Biraz kafani karistirayim.

0x8 = 0.5
0x80 = 0.5
0x8000 = 0.5
0x80000000 = 0.5
 
Son düzenleme:
Anlasilan fix point sayilarla hic ugrasmamissin.

En basta ne demistim?



1000.0000 = 8.0
0000.1000 = 0.5

Tam sayi kullanmiyorsan, noktaya da ihtiyacin kalmaz bu durumda 1000 ikili sayisi 0.5 anlamina gelir.

Yani 8/16

Biraz kafani karistirayim.

0x8 = 0.5
0x80 = 0.5
0x8000 = 0.5
0x80000000 = 0.5
konuya baya uzağım anlaşılan :emindegil1::rolleyes::cheeky2::)
 
Konudaki kafa karışıklığının sebebi artık insanların sebebi float tipi değişkenli şeyler kullanmanın maliyetini daha önce düşünmemek. Burada anlatılan işlemlerde böyle bir değişkeniniz olmadan aslında küsüratlı sayılar tutabiliyorsunuz, dolayısıyla işlem yapması da çok daha kolay, mesela floating point unit e sahip olmayan bir işlemciniz olsun. Bunda bir float ile işlem yapmak mı daha hızlı yoksa integer tipi değişken ile mi?
 
[math]y=2^nB_n+2^{n-1}B_{n-1}+ ......8B_3+4B_2+2B_1+B_00+A_12^{-1}+A_22^{-2}+A_32^{-3}+........A_{m} 2^{-m}[/math]
Tam sayilarla ugrasiyorsaniz tum A katsayilari sifir.
1 den kucuk pozitif sayilarla calisiyorsaniz tum B katsayilari sifir.

Fixpoint sayilarla calisiyorsaniz A ve B katsayilari kullaniliyor.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,072
Mesajlar
103,688
Üyeler
2,542
Son üye
coskuncinar

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Back
Top