Lebegőpontos (valós számok) számok tárolása?
Programozzunk Turbo Pascal nyelven c. könyv:
"A valós számok a*2^b formában tárolódnak ahol az a egy (fixpontos) kettedes tört, míg a b 2 hatványkitevője. Pl a 5.25 a 1.1010*2^2 formában tárolódik"
Ez h így tárolódik ez programozásban mindenhol igaz h a számítógép így tárolja a memóriaterületen vagy ez csak Turbo Pascal-nál érvényes. Az h "kettedes tört" azt jelenti h kettes számrendszerben felírt tizedestört? Továbbá a példaszám az hogy jön ki?
Köszönöm előre is, üdv
Szia.
Nem kavartad össze egy kicsit a 0-kat és az 1-ket ?
A példádnál maradva : 2^2=4
1.1010 = 1*1 + 1*0.5 + 0*0.25 + 1*0.125 + 0*0.0625 = 1.625
1.625*4=6.5
Tehát az eredmény : 6.5
A jó szám esetém : 1.0101 = 1*1 + 0*0.5 + 1*0.25 + 0*0.125 + 1*0.0625 = 1.3125
1.3125*4 = 5.25
Tehát az eredmény : 5.25
Sok sikert.
Üdv.
Köszönöm a válaszod.
Nem,nem kevertem össze a 0-tés 1-t, teljesen biztos vagyok benne h így van a könyvben, itt van előttem abból másolom:
5.25, 1.1010*2^2
A két kifejtés amit leírtál annak mi a logikája? Mert erről nem r a könyv. Látok benne vmi logikusságot, de ha leírnád azért hálás lennék :D
És az h így tárolódik, az operációs rendszer szinten igaz vagy csak a Pascal programokra?
Köszönöm, Üdv
Első 2 oldalt olvasd el, hátha jobban megérted.
(A linkben a @-ot cseréld a-ra, máshogy nem engedte.)
Szia.
Kezdjük a második kérdésednél : Minden programozási nyelvben vannak változók. A változóknak vannak tipusaik (pl. Byte, Char, String, Longint, Shortimz, Single, Real)
Nos ezek a tipusok határozzák meg a tárolási módot a memóriában.
A byte és a char az elvileg 1 bájton fog tárolódni, mig a string (pascalban) 256 bájton, a Longint 4 Bájt, a Single szintén 4 bájt a Real az azt hiszem 6 bájt.
A Te általad emlitett tárolási forma a Singlénél és a Reálnál valószinűsithető.
A változók tárolási módszerébe Neked nem sok beleszólásod van (csak egész kis mértékben, azzal, hogy megadod a változó tipusát), mivel ezt egészben a forditó végzi.
Ha a forditó úgy van megirva, hogy minden char tipúsú változóhoz - ami elvileg 1 bájtos - 500 bájtot rendeljen hozzá, akkor az a Char tipúsú valtozó 500 bájton fog tárolódni - Tudom, hogy ilyen nincs, de elképzelhető egy igy megirt forditó is.
Ebből következik, hogy azt, hogy hogyan tárolódnak a változók a memóriában a forditó határozza meg, és azt is hogy 1,2, vagy több bájt tartoztik 1 változóhoz.
Ezért nem lehet egyenesen kijelenteni, hogy minden programnyelvben úgyanúgy tárolódnak a változók (nagy valószinűség szerint igy van, mivel mindenhol törekedtek a memória felhasználás csökkentésére, de ez nagyban függ a forditótól és attól kik készitették azt a forditót.)
1 kérdés :
Helyiértékek.
A tizes számrendszerben a helyiértékek a következők :
10^3=100, 10^2=10, 10^1=1, 10^-1=0.1, 10^-2=0.01, 10^-3=0.001
A kettesben ugyan ilyen alapon :
2^3=8, 2^2=4, 2^1=1, 2^-1=0.5, 2^-2=0.25, 2^-3=0.125
A Példádnál maradva : 5.25.
Át kell alakitani kettes számrendszerbe a megadott formula aalpján a*2^b :
Ez tizesben automatikusan megy (nem is gondolunk bele, mert rutinszeruen tudjuk), kettesben is ugyanúgy kell mint tizesben tehát :
5.25-ben a 2^3=8 nincs meg tehát 0, és maradt 5.25
5.25-ben a 2^2=4 megvan, tehát ez az ami a "b"-t adja (2^2 tehát B=2), az osztás eredménye (5.25/4) pediglen 1.3125.
Ezt kell kettes számrendszerbe átalakitani, hogy megkapjuk "a"-t :
1.3125-ben a 2^1=1 megvan, tehát 1 és maradt 0.3125
0.3125-ben a 2^-1=0.5 nincs, tehát 0 és maradt 0.3125
0.3125-ben a 2^-2=0.25 megvan, tehát 1 és maradt 0.0625
0.0625-ben a 2^-2=0.125 nincs, tehát 0 és maradt 0.0625
0.0625-ben a 2^-3=0.0625 megvan, tehát 1 és maradt 0
Az 5.25 tizes számrendszerbeli szám valós számként ábrázolva a*2^b formában : 1.0101*2^2
Sok sikert.
Üdv.
Egész típusoknál nem számít sokat az architektúra, nagyjából transzparensen meg lehet oldani tetszőleges méretű egészek műveleteit, nyílván akkor ideális, ha a méret kisebb egyenlő az adott rendszer bitszélességével.
A lebegőpontos számoknál viszont sokat számít az FPU, ugyanis a processzor "alap" részei nem képesek lebegőpontos számításokat végezni. Mivel ez jórészt szabványosított, így mondhatjuk, hogy a legtöbb programozási nyelvben legalábbis megtalálhatóak ezek a típusok:
De maga a számábrázolás ELVE mindenhol ugyanaz: karakterisztika és mantissza.
Nagyon-Nagyon köszönöm a válaszokat, sokat segítettek!
Köszönöm, Üdv.
Nem szólt senki, de rosszul irtam, elnézést mindenkitől.
Igy a helyes :
A tizes számrendszerben a helyiértékek a következők :
10^3=1000, 10^2=100, 10^1=10, 10^0=1, 10^-1=0.1, 10^-2=0.01, 10^-3=0.001
A kettesben ugyan ilyen alapon :
2^3=8, 2^2=4, 2^1=2, 2^0=1, 2^-1=0.5, 2^-2=0.25, 2^-3=0.125
Mégegszer bocsi.
Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!