Inledning Statistisk Programmering Att använda dator Datorernas utveckling sen 1970 har revolutionerat den statistiska vetenskapen! Göran Broström gb@statumuse Statistiska institutionen Umeå universitet 901 87 Umeå Statistisk Programmering, hösten 2002 p1/32 Statistisk Programmering, hösten 2002 p2/32 UNIVAC 1107 (sextio- och sjuttiotal) Hålkorten Statistisk Programmering, hösten 2002 p3/32 Statistisk Programmering, hösten 2002 p4/32
Åttiotal De första persondatorerna: 1978: Sirius Operativsystem CP/M Två floppydiskar (A: och B:) Pris ca 50 000 kr (i dåvarande penningvärde!) 1980: Ericsson PC Intel 8088, 477 MHz 640K RAM Ingen hårddisk! 1982: Den första hårddisken 10 MB Stora centrala datorer fortfarande norm Nittiotal Stordatorer (i klassisk mening) ute Persondatorn på bred front Unix (Linux) arbetsstationer Lokala nätverk Internet (redan i slutet av 80-talet!) Superdatorer Parallella processorer Min senaste PC (2001): Intel P4 17 GHz processor 40 GB hårddisk 12 GB RAM Era senaste (2002): Nolltal Statistisk Programmering, hösten 2002 p5/32 En bokstav = 1B = 1 Byte 1KB (KiloByte) = 1024 B ( 1MB (MegaByte) = 1024 KB 1GB (GigaByte) = 1024 MB Så GB miljard bokstäver 15 hyllmeter böcker Statistisk Programmering, hösten 2002 p6/32 Byte ) 200 000 sidor text OBS! Böcker i ASCII-format! (I Word-format blir det inte så mycket) Statistisk Programmering, hösten 2002 p7/32 Statistisk Programmering, hösten 2002 p8/32
Datorn för en statistiker Dataförvaring Dataanalys Rapportskrivning Implementering av nya metoder Test av metoder Simulering Datorns komponenter Permanent datalagring Hårddisk Diskett, CD, tape Read Only Memory (ROM) Tillfällig datalagring: Random Access Memory (RAM) Cacheminne Processor(er) In- och utdataenheter Statistisk Programmering, hösten 2002 p9/32 Statistisk Programmering, hösten 2002 p10/32 ROM OS Minne RAM Applikationer och Data Operativsystemet (Windoze) ligger på hårddisken Läses in i ROM när datorn startas Program som startas läses in i RAM ROM och RAM töms när datorn slås av Master Boot Record (MBR) Först på hårddisken (CD, floppy) Talar om var datorn kan hitta operativsystemet Indata- och utdataenheter Indataenheter Tangentbord Floppy-, CD-, hårddiskläsare Utdataenheter Bildskärm Floppy-, CD-, hårddiskskrivare Skrivare Basic Input Output System (BIOS) Hårdvara, datum och tid, etc Boot ordning (floppy, CD, hårddisk) Press F1 for IBM BIOS Setup Utility Statistisk Programmering, hösten 2002 p11/32 Statistisk Programmering, hösten 2002 p12/32
Arbetsmodell för datorarbete Instruktion Process Resultat Datalagring Läsa från RAM: snabbt Läsa från hårddisk: lååångsaaamt Slutsats: Viktigt med mycket RAM Data Övning: Hur många MB RAM behövs för att lagra en matris? Ledning: Det beror på Data i RAM (ev hårddisk) Process (program) i RAM Statistisk Programmering, hösten 2002 p13/32 Statistisk Programmering, hösten 2002 p14/32 Data ASCII (7-bitars) 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 BYTE = 8 BITS BIT = BInary digit, dvs 0 eller 1 Data lagras linjärt En byte = en bokstav (ASCII): 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 G B Telia ADSL lovar 05 Mbits/sek (in, år 2002) Det är 625 KB/sek, 1 MB tar 16 sek att ladda ner LSD MSD 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2 spc! # $ % & ( ) * +, - / 3 0 1 2 3 4 5 6 7 8 9 : ; < = >? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ 6 a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { } a b c LF CR d e f NUL blir abc def på skärmen/papperet (DOS/Windows) ] _ DEL Statistisk Programmering, hösten 2002 p15/32 Statistisk Programmering, hösten 2002 p16/32
Binära talsystemet Dataformat Decimalt 0 1 2 3 4 5 6 7 8 9 10 Binärt 0 1 10 11 100 101 110 111 1000 1001 1010 Vad är Vad är decimalt? binärt? Heltalsdivision med 2: Dividend Resultat Rest 112 56 0 56 28 0 28 14 0 14 7 0 7 3 1 3 1 1 1 0 1 Svar: Hur många olika tecken i en byte? Jo, stycken ASCII: Använder 7 bitar (128 tecken Latin-1: Använder 8 bitar (256 tecken) Latin-2: Använder 8 bitar (Östeuropa) Unicode: Använder 16 bitar (65 536 tecken) Statistisk Programmering, hösten 2002 p17/32 Statistisk Programmering, hösten 2002 p18/32 Logiska (TRUE, FALSE) Heltal I R: Variabeltyper Flyttal (enkel precision) Cirka 7 signifikanta siffror Flyttal (dubbel precision) Cirka 15 signifikanta siffror Text 1 BYTE per bokstav I R finns inte enkel precision (4 BYTES) (4 BYTES) (8 BYTES) (i) Positiva 8-bitars: 16-bitars: 32-bitars: Heltal Representeras as is (8-bitars): 0 = 00000000 1 = 00000001 2 = 00000010 255 = 11111111 Statistisk Programmering, hösten 2002 p19/32 Statistisk Programmering, hösten 2002 p20/32
(ii) Med tecken (8-bitars) (a) Första biten = tecken 00000001 = +1 10000001 = -1 osv Nackdelar: (a) Svårt med addition (b) Två nollor Heltal (b) Två-komplement 00000000 = 0 00000001 = 1 01111111 = 127 10000000 = -128 (!) 11111111 = -1 Heltal Fördelar Addition fungerar automatiskt Inga dubbla nollor Statistisk Programmering, hösten 2002 p21/32 Statistisk Programmering, hösten 2002 p22/32 Overflow Flyttal (16-bitars): Svar: Overflow! Exponentiell notation: Enkel koll av overflow : 1 2 och har olika tecken: Aldrig overflow och har samma tecken: (i) har samma tecken: OK (ii) byter tecken: Overflow! 3 I R; overflow ger NA e+5 Statistisk Programmering, hösten 2002 p23/32 Statistisk Programmering, hösten 2002 p24/32
64 bitar (8 BYTES): Dubbel precision s exponent mantissa 1 11 52 Ungefär 15 signifikanta siffror Men: och: Overflow Inf går inte Inf NaN 0 R Det finns bara ändligt många flyttal i datorn! I R finns Inf, med vanliga räkneregler (IEEE) Statistisk Programmering, hösten 2002 p25/32 Statistisk Programmering, hösten 2002 p26/32 Underflow Maskinkod Sätta = 0 är farligt Men, från vänster: Inf går inte (= 0 i R NaN! Exempel: Kod Betyder 0001 0001 0000 1010 Kopiera innehållet i minnescell 10 till register 1 0011 0011 0000 1000 Spara innehållet i register 3 i minnescell 8 0100 0001 0010 0011 Addera innehållen i registren 1 och 2, spara resultatet i register 3 Processorspecifik kod Hopplöst att lära sig! Någonting bättre behövs! Statistisk Programmering, hösten 2002 p27/32 Statistisk Programmering, hösten 2002 p28/32
Assemblerkod Högnivåspråk, C och FORTRAN Exempel: Exempel Skalärprodukt Assemblerkod Maskinkod LOAD R1 10 0001 0001 1010 0000 ADD R1 R2 R3 0100 0001 0010 0011 SUB R1 R2 R4 0101 0001 0010 0100 STORE R3 08 0011 0011 1000 0000 C-kod /* Skalärprodukt */ int k; double x[10], y[10]; double z; C FORTRAN-kod Skalärprodukt integer k double precision x(10), y(10) double precision z HALT 1111 0000 0000 0000 En assembler översätter assemblerkoden till maskinkod (objektkod) for (k = 0; k < 10; k++){ x[k] = k + 1; y[k] = 10 - k; } do k = 1, 10 x(k) = k y(k) = 10 - k + 1 end do Fortfarande maskinorienterat, ett lågnivåspråk z = 00; for (k = 0; k < 10; k++) z += x[k] * y[k]; z = 0d0 do k = 1, 10 z = z + x(k) * y(k) end do Statistisk Programmering, hösten 2002 p29/32 Statistisk Programmering, hösten 2002 p30/32 Högrenivåspråk, S (R och S-Plus) Nästa gång # Skalärprodukt x <- 1:10 y <- 10:1 z <- x %*% y # eller: z <- sum(x * y) S är ett vektoriserande språk: betyder matrismultiplikation Notera att vektorer inte har attributet rad- eller kolumn- Programmering i allmänhet Programmering i R i synnerhet: Objekt i R Uttryck och tilldelning Datatyper Indexering Funktioner och makron Kontrollstrukturer Vektorisering i någon ordning Några jämförelser med C, FORTRAN Statistisk Programmering, hösten 2002 p31/32 Statistisk Programmering, hösten 2002 p32/32