Kod stałopozycyjny: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
Addbot (dyskusja | edycje)
m Bot: Przenoszę 11 linków interwiki do Wikidata, znajdziesz je teraz w zasobie d:q649900
Linia 1:
'''Zapis stałoprzecinkowy''' albo '''stałopozycyjny''' ([[Język angielski|ang.]] ''fixedpoint'') – jeden ze sposobów zapisu liczb ułamkowych stosowanych w [[informatyka|informatyce]]. Do zapisu liczby stałoprzecinkowej przeznaczona jest z góry określona ilość cyfr dwójkowych ([[bit|bitów]]ów), a pozycję przecinka ustala się arbitralnie, w zależności od wymaganej dokładności.
 
Na przykład: mając do dyspozycji [[Słowo maszynowe|słowo]] 32-bitowe, można wydzielić 24 bity na część całkowitą, 8 bitów na część ułamkową, albo po 16 bitów na część całkowitą i ułamkową, albo 30 bitów na część całkowitą i zostawić tylko 2 bity do zapisu części ułamkowej.
Linia 7:
W skrajnych wypadkach możliwa jest sytuacja kiedy przecinek będzie stał poza znaczącymi cyframi liczby. Jeśli będzie on z lewej strony, będziemy mieć zakres mniejszy od 1, jeśli z prawej – precyzja będzie większa lub równa 1 (równość wystąpi, kiedy przecinek będzie stał bezpośrednio za cyframi znaczącymi, będziemy mieć wtedy zwykłe liczby całkowite).
 
== Zakresy liczb ==
 
Wartość liczby stałoprzecinkowej jest określana tak jak w [[system liczbowy|pozycyjnym systemie liczbowym]]. Wagi bitów części całkowitej mają wartości (kolejno, od najbardziej znaczącego bitu): <math>2^{k-1}\ldots 2^0</math>, natomiast wagi bitów części ułamkowej mają wartości: <math>2^{-1}\ldots 2^{-n}</math>. Dokładność reprezentacji wynosi <math>2^{-n}</math>, czyli jest równa wadze najmniej znaczącego bitu części ułamkowej.
 
Linia 16 ⟶ 15:
Zostawiam zakomentowane, bo może ktoś jednak stwierdzi, że miałem zły pomysł - ponizej to samo tylko pokolorowane, kod fatalny ale dla czytelnika chyba ciekawiej wyglada
* wartość maksymalna:
: <math>1111,11_{2} = 2^{3} + 2^{2} + 2^{1} + 2^{0} + 2^{-1} + 2^{-2} = 15,75_{10}</math>
* wartość minimalna:
: <math>0000,01_{2} = 2^{-2} = 0,25_{10}</math>
* przykładowa liczba:
: <math>1011,10_{2} = 2^{3} + 2^{1} + 2^{0} + 2^{-1} = 11,5_{10}</math>
-->
* wartość maksymalna:
: <fontspan style="color:darkred;">1111</fontspan>,<fontspan style="color:darkgreen;">11</fontspan><sub>2</sub> = <fontspan style="color:darkred;">2<sup>3</sup> + 2<sup>2</sup> + 2<sup>1</sup> + 2<sup>0</sup></fontspan> + <fontspan style="color:darkgreen;">2<sup>-1</sup> + 2<sup>-2</sup></fontspan> = <fontspan style="color:darkred;">15</fontspan>,<fontspan style="color:darkgreen;">75</fontspan><sub>10</sub>
* wartość minimalna:
: <fontspan style="color:darkred;">0000</fontspan>,<fontspan style="color:darkgreen;">01</fontspan><sub>2</sub> = <fontspan style="color:darkgreen;">2<sup>-2</sup></fontspan> = <fontspan style="color:darkred;">0</fontspan>,<fontspan style="color:darkgreen;">25</fontspan><sub>10</sub>
* przykładowa liczba:
: <fontspan style="color:darkred;">1011</fontspan>,<fontspan style="color:darkgreen;">10</fontspan><sub>2</sub> = <fontspan style="color:darkred;">2<sup>3</sup> + 2<sup>1</sup> + 2<sup>0</sup></fontspan> + <fontspan style="color:darkgreen;">2<sup>-1</sup></fontspan> = <fontspan style="color:darkred;">11</fontspan>,<fontspan style="color:darkgreen;">5</fontspan><sub>10</sub>
 
==Praktyczna realizacja arytmetyki stałoprzecinkowej==
 
== Praktyczna realizacja arytmetyki stałoprzecinkowej ==
Zapis stałoprzecinkowy ma tę zaletę, że arytmetyka stałoprzecinkowa może zostać zrealizowana za pomocą działań całkowitoliczbowych. Dzięki temu działania na ułamkach są do realizowania tam, gdzie nie ma możliwości użycia [[liczba zmiennoprzecinkowa|liczb zmiennoprzecinkowych]]: na procesorach bez [[FPUkoprocesor|jednostki zmienoprzecinkowej]], na prostych [[mikrokomputer]]ach lub w programach używających rozkazów [[MMX (zestaw instrukcji)|MMX]]. Zapis stałoprzecinkowy był także powszechnie stosowany gdy jednostka zmiennoprzecinkowa procesora była nie dość wydajna, a jednocześnie nie była potrzebna wysoka dokładność obliczeń, np. w szybkich procedurach graficznych.
 
Jeśli obliczyć wartość liczby stałoprzecinkowej <math>x</math> w [[naturalnydwójkowy kodsystem binarnyliczbowy|naturalnym kodzie dwójkowym]], wartość ta wyniesie <math>x 2^{n}</math>. Wówczas działania całkowitoliczbowe mają postać:
* Dodawanie/odejmowanie: <math>a 2^{n} \pm b 2^{n} = (a \pm b) 2^{n}</math> - wynik nie wymaga korekty, jest to zapis stałoprzecinkowy z założoną dokładnością.
* Mnożenie: <math>a 2^{n} b 2^{n} = ab 2^{2n}</math> - wynik wymaga korekty, należy podzielić go przez <math>2^{n}</math>, aby uzyskać postać <math>x 2^{n}</math>.
Linia 40 ⟶ 38:
Mnożenie i dzielenie przez potęgę dwójki, w tym przypadku <math>2^{n}</math>, jest równoważne [[przesunięcie bitowe|przesunięciu bitowemu]] (odpowiednio) w lewo bądź prawo o <math>n</math> bitów; jest to operacja bardzo szybka.
 
== Zobacz też ==
* [[Liczba zmiennoprzecinkowa]]