Einnig kallað
Vikur 1-4 verða fleytitölur (e. floating point), skekkja í útreikningum, tölulegar lausnir á jöfnum, fastapunktsaðferðir.
Vikur 5-13 verða línulega algebra, tölulegar útfærslur á línulegri algebru, ýmsar hagnýtingar og gagnavinnsla.
Að öðlast góðan bakgrunn í reiknifræði. Eftir námskeiðið eigið þið að
Nokkrar leiðir til að kóða rauntölur. Fastur punktur (fixed point), t.d. 6 stafir, notum 2 fyrir aftan punkt. Geymt í minni sem heiltala 0-999999. Getum táknað tölur frá 0.00 til 9999.99
Ókostir eru að það er auðvelt að tapa nákvæmni, t.d.
\(1.25 \times 1.25 = 1.5625 = 1.56\)
\(0.01 \times 0.01 = 0.0001 = 0.00\), því við töpum síðasta aukastaf.
Stundum þurfum við litlar tölur t.d. \(10^{-18}\) fyrir efnafræði og stórar tölur, \(10^{18}\) fyrir stjörnufræði.
Fórnum einum staf í nákvæmni til að kóða fyrir veldisvísi. T.d. fyrsti stafur 0-9 (eða -4 til 5) kóðar fyrir veldinu á 10. Hinir 5 stafirnir skipta bilinu upp í jafnmarga hluta.
\[-4 \to 10^{-4} - 10^{-3}\\ -3 \to 10^{-3} - 10^{-2}\\ \ldots\\ 0 \to 10^{0} - 10^{1}\\ \ldots\\ 5 \to 10^5 - 10^6 \]
Táknum núna
\[ 1.25 = 1.25 \times 10^0 \equiv (0,12500)\\ 782.5 = 7.825 \times 10^2 \equiv (2,78250)\\ 0.01 = 1\times 10^{-2} \equiv (-2,10000) \]
Þar sem fyrri hluti er veldisvísirinn og seinni hlutinn er fimm stafa heiltala sem kóðar tölur frá 1.0 til 9.9999.
Fórnum nokkrum stöfum af nákvæmni til að finna rétta skalann til að vinna með. Þ.e. punkturinn er færist til og er fljótandi. Einnig kallað staðalform (e. scientific notation), fjöldi stafa fyrir aftan punkt er kallað fjöldi markverðras stafa.
\[ 1.25 \times 1.25 = 1.5625 = (0,15265)\\ 0.01 \times 0.01 = 0.0001 = (-4,10000)\]
Hér töpum við ekki svarinu því skalinn breytist með niðurstöðunni.
Er staðall til að kóða fleytitölur á tvíundarformi og skilgreina nákvæmlega reikniaðgerðir á þeim. Þetta var nauðsynlegt því mismundandi niðurstöður gátu fengist með mismunandi örgjörvum. Staðallinn skilgreinir
Allir örgjörvar sem bjóða upp á fleytitölur fylgja þessum staðli. Flestir eru með einfaldar reikniaðgerðir innbyggðar, notum forritasöfn til að fá rest.
Single precision float notar 32 bita (4 bæti) en double notar 64-bita (8 bæti).
Veldisvísirinn er tala frá 0-255, drögum frá 127 (e. bias) til að fá veldið á 2. Möguleg gildi eru \(-126,-125,\ldots,126,127\).
-127 og 128 (allir bitar 0 eða allir 1) hafa sérstaka merkingu.
Tölukjarninn er 23-bita heiltala. Tvíundatölur á staðalformi byrja ekki á 0, bara á 1. Því þarf ekki að geyma fyrsta 1 í minni. Ef tölurnar eru \((s,e,m)\) þá er gildið \[ (s,e,m) \equiv (-1)^s\cdot (1.m)\cdot 2^{e-127} \]
T.d. væri 1.25 geymt sem
0 01111111 01000000000000000000000
Til að leggja saman \(x+y\) þarf að
Dæmi með 8-bita formi, 1 bita í formerki, 4 í veldisvísi og 3 í heiltölukjarna.
\(1.110\times 2^2 + 1.000\times 2^0\)
Töpum aukastöfum ef tölurnar eru misstórar.
Sama form, margföldum \(1.010\times 2^0 * 1.010\times 2^0\)
Töpum ekki aukastöfum fyrir misstórar tölur.
Samlagning og margföldun með rauntölur er
Fleytitölusamlagning er bara víxlin.
Það eru til tölur þ.a. \(1+x = 1\) og \(y + 1 = y\)
Það verður verkefni á heimadæmunum að finna þær.
Ef við reiknum summuna \(\sum_{i=0}^n x_i\) fyrir fleytitölur þá skiptir röð aðgerða máli upp á lokaniðurstöðu.
Við getum tapað mikilli nákvæmni með því að byrja fyrst, vs. byrja aftast.
Veldisvísirinn fyrir 32-bita tölur gat ekki verið -127 og 128 (þ.e. eftir að búið var að draga frá 127). Þessi gildi eru notuð til að tákna sérstakar fleytitölur
Tölur sem eru ekki á staðalformi tákna \[(-1)^s (0.m) \times 2^{-127}\]
Þegar niðurstaða verður of stór til að geymast sem fleytitala verður hún að "Inf" eða "-Inf". Þetta kallast overflow.
Nýjar reiknireglur gilda um "Inf", t.d.
NaN er n.k. ruslakista ef við notum NaN í útreikningi verður niðurstaðan NaN.
Þegar niðurstaða er of lítil er hún námunduð niður í 0 (eða -0). Þetta kallast underflow.
Tölur sem eru ekki á staðalformi, þ.e. minni en \(2^{-127}\) tapa nákvæmni því fjöldi aukastafa er minni, en hægja samt á underflow í venjulegum útreikningum (e. gradual underflow).
T.d. eru til tölur þ.a. \(x\neq 0, x^2 = 0\). Stundum þarf að umrita reikninga til að tapa ekki nákvæmni.
Python er forritunarmál sem er mun einfaldara í notkun en t.d. Java og C++. Við munum læra nóg í python til að framkvæma útreikninga en hugsa minna um hugbúnaðarferla.
Fyrir tölulega útreikninga, línulega algebru og gröf munum við nota numpy og matplotlib.
Python verkefni verða sett fyrir sem Jupyter notebooks (hét einu sinni iPython notebook) sem blandar saman texta og útreikningum.
Dæmi á vikublaði. Skil á mánudag.
Setja upp Python og Jupyter (notebook), leiðbeiningar á Piazza.
Renna yfir ítarefni fyrir fleytitölur