Reprezentacje liczb, algorytm Hornera, badanie b艂臋d贸w numerycznych
Cz臋艣膰 I
1. Wst臋p
Funkcj臋
mo偶na przedstawi膰 w postaci niesko艅czonego szeregu:
Charakterystyczna cecha tej funkcji jest to, ze pochodna tej funkcji jest jej r贸wna.
Wykresem funkcji
jest:
2. Fragment kodu:
hold on;
x=1
dokladnosc=0.01;
maxilosc=1000;
wynik1=1;
bladoszacowania1=0;
for p=1:maxilosc
wynik1=wynik1+(x^p)/factorial(p)
bladoszacowania1(p)=exp(x)-wynik1;
if dokladnosc>abs((x^p)/factorial(p)) break
end
end
plot(bladoszacowania1,'b')
Wykres po zaimplementowaniu kodu programu:
3. Podsumowanie
Program zosta艂 napisany w 艣rodowisku Matlab. By艂o to pierwsze nasze zetkni臋cie si臋 z tym 艣rodowiskiem programistycznym, wiec je艣li wyst膮pi艂 jaki艣 b艂膮d by艂 on spowodowany jedynie niewiedz膮 student贸w na temat 艣rodowiska programistycznego.
Po zaimplementowaniu kodu programu i z wyrysowanego przez niego wykresu mo偶emy stwierdzi膰, i偶 wszystkie b艂臋dy d膮偶膮 do „0”, wi臋c jest to jak najbardziej wskazane zachowanie. Mo偶emy r贸wnie偶 zaobserwowa膰, i偶 po ka偶dym przej艣ciu przez p臋tl臋 for b艂膮d zmniejsza si臋, gdy偶 dodawane s膮 coraz dok艂adniejsze przybli偶enia.
Cz臋艣膰 II
1. Wst臋p
Dowolny wielomian o postaci:
mona zapisa膰 w postaci, kt贸ra pozwala na realizacj臋 tzw. algorytmu Hornera:
Kolejno definiujemy:
Podstawiamy bn do wielomianu:
2. Fragment kodu
float liczenie()
{
cout << "Podaj stopien wielomianu: n = ";
cin >> n;
for (int i = 0; i <= n ; i++)
{
cout << "Podaj wspolczynnik a" << i << ": ";
cin >> tab_a[i];
}
cout << "Podaj x: ";
cin >> x;
float wynik = tab_a[n];
for (int i = n - 1; i >= 0; i--)
{
wynik = wynik * x + tab_a[i];
}
return wynik;
}
3. Podsumowanie
Przy wykorzystaniu algorytm贸w "mno偶膮cych" takich jak algorytm Hornera skracamy diametralnie czas wykonywania, rozwi膮zywania zadania poprzez znaczne ograniczenie czynno艣ci mno偶enia, kt贸ra jest bardzo czasoch艂onna. Przyk艂adowo dla wielomianu stopnia 3 przy tradycyjnym rozwi膮zaniu wykonujemy a藕 6 mno偶e艅, podczas gdy przy u偶yciu algorytmu Hornera tylko 3 to skraca czas oblicze艅, zwa偶ywszy na to, 偶e ilo艣膰 poszczeg贸lnych operacji dodawania jest niezmienna.
Cz臋艣膰 III
1. Wst臋p
Przedstawienie liczby w postaci binarnej, znaczy zapisanie jej w formacie „0” i „1”. W komputerze, ka偶da informacja musi mie膰 posta膰 ci膮gu zer i jedynek, dlatego znak liczby jest reprezentowany przez dodatkow膮 cyfr臋 dw贸jkow膮, zwan膮 bitem znaku, kt贸ra poprzedza w艂a艣ciwe cyfry liczby. Cyfra „l” na pozycji bitu znaku zast臋puje tradycyjny znak minus w zapisie liczb ujemnych, a „0” wyst臋puje zawsze przed liczbami nieujemnymi. Bitu znaku liczby w reprezentacji binarnej nie mo偶na pomin膮膰.
5 = 0.101 -5 = 1.101
Pogrubiona cyfra to bit znaku.
2. Fragment kodu
void binarnie( int liczba)
{
int reszta=liczba%2;
if (liczba>1)
{
binarnie (liczba/2);
}
cout<<(reszta);
}
void main()
{
int liczba;
cout<<"Podaj liczbe: ";
cin>>liczba;
cout<<"W formie binarnej to: ";
if (liczba > 0)
{
cout << "0.";
binarnie(liczba);
}
if (liczba < 0)
{
cout << "1." ;
liczba = liczba *(-1);
binarnie(liczba);
}
3. Podsumowanie
Celem 膰wiczenia by艂o zapoznanie si臋 z zapisywaniem cyfr w formacie binarnym oraz zaimplementowanie tych wiadomo艣ci w kodzie 藕r贸d艂owym programu.
Liczb臋 ujemn膮 mo偶emy zapisa膰 na kilka sposob贸w:
- znak-modu艂
5 = 0101 -5 = 1101
- dope艂nienie do jedynki, czyli odwr贸cenie wszystkich bit贸w liczby dodatniej
5 = 0101 -5 = 1010
- dope艂nienie do dw贸ch, czyli odwr贸cenie wszystkich bit贸w liczby wyj艣ciowej i dodanie „1”
5 = 0101 -5 = 1011
Zakresy liczb jakie mo偶na zapisa膰 w zmiennych okre艣lonego typu:
char (8-bit贸w) -128/+127(ze znakiem) i 0/+255(bez znaku);
short int (16-bit贸w) -32 768/+32 767(ze znakiem) i 0/65 535(bez znaku);
int, long int (32-bity) -2 147 483 648/+2 147 483 647(ze znakiem)
0/ +4 294 967 295(bez znaku);