เดินหน า¸£ายงานประจำปี/2552.pdf · [ สู ค ว า ม สํ า เ ร็ จ ] เดินหน า 2552, 2553, 2554, ...
Data storage II - staff.informatics.buu.ac.thjanya/88612159/lecture/lecture06.pdf ·...
Transcript of Data storage II - staff.informatics.buu.ac.thjanya/88612159/lecture/lecture06.pdf ·...
Data storage II
Introduction to Computer Science(88612159)
2/77
การแทนนข+อมูลด+วยเลขฐานสองในรูปแบบต;างๆ
1. จำนวน
1.1 จำนวนเต็ม
จำนวนธรรมชาติ N (unsigned = ไม;มีเครื่องหมาย)
จำนวนเต็ม Z (signed = มีเครื่องหมาย)
1.2 จำนวนจริง R
2. ตัวอักขระ (character)
3. ภาพ
4. เสียง
3/77
จุดประสงค-การเรียนรู5
uการจัดเก็บจำนวนเต็มในระบบ Excess-n Notation
uการจัดเก็บจำนวนจริงในระบบ Floating Point Number
การจัดเก็บจำนวนเต็มในระบบ Excess-n Notation
5/77
การจัดเก็บจำนวนเต็มในระบบ Excess-n Notation
u การแทนจำนวนเต็มในระบบสDวนเกิน n
uใชGจำนวนบิตคงท่ี
uเร่ิมตGนดGวยการกำหนดจำนวนบิตท่ีตGองการ
uเรียกวDา Excess-n Notation (ระบบสDวนเกิน n)
n = 2จำนวนบิต-1
6/77
พิสัยของ Excess-n Notation
u Excess-n Notation (ระบบส=วนเกิน n)
n = 2จำนวนบิต-1
u พิสัยแบบมีเครื่องหมายคือ -2 จำนวนบิต -1 ถึง 2 จำนวนบิต -1 -1
ตัวอย=าง
พิสัยของ Excess-4 Notation คือ
พิสัยของ Excess-32 Notation คือ
7/77
การจัดเก็บจำนวนเต็มในระบบ Excess-n Notation
u การแทนจำนวนเต็มในระบบสCวนเกิน n (Excess-n Notation)
u เขียนรูปแบบของบิตโดยเริ่มตPนจากศูนยR และเพิ่มคCาทีละหนึ่งจนถึง
คCาสูงสุด
u รูปแบบของบิตท่ีมีนัยสำคัญสูงสุด
uเป[น 0 ใชPแทนจำนวนลบ
uเป[น 1 ใชPแทนจำนวนบวก
8/77
ตัวอย)างท่ี 1u ระบบ Excess-4 Notation
u จำนวนบิต คือ 3u พิสัยอยู)ในช)วง -4 ถึง 3
ระบบ Excess-4 Notation
9/77
ระบบ Excess-4 Notationu หากนำค;าฐานสิบระบบ Excess-4 บวกดAวยค;าคงท่ี 4 จะไดA
ค;าฐานสิบในระบบเลขฐานสอง จึงเรียกว;าระบบส;วนเกิน 4
10/77
ตัวอย*างท่ี 2
u ระบบ Excess-8 Notation
u จำนวนบิต คือ 4
u พิสัยอยู*ในช*วง -8 ถึง 7
ระบบ Excess-8 Notation
11/77
u หากนำค*าฐานสิบระบบ Excess-8 บวกด;วยค*าคงท่ี 8 จะได;ค*าฐานสิบในระบบเลขฐานสอง จึงเรียกว*าระบบส*วนเกิน 8
11
ระบบ Excess-8 Notation
12/77
การแปลงเลขฐานสองในระบบ Excess-n notation
เปAนเลขฐานสิบ
13/77
Excess-4 notation (ฐานสองเป;นฐานสิบ)
การแปลงเลขฐานสองในระบบ Excess-4 notation เป;น เลขฐานสิบ
หาไดIจาก
u คLาฐานสิบ (ระบบฐานสอง) – 4
u จงแปลง 1102 (Excess-4 notation) เป;นฐานสิบ
หาไดIจาก 6 - 4 = 2
ดังนั้น 1102 (Excess-4 notation) = 210
ตัวอยLาง
u 1112 (Excess-4 notation) = ?10
u 0012 (Excess-4 notation) = ?10
u 1012 (Excess-4 notation) = ?10
14/77
Excess-8 notation (ฐานสองเป;นฐานสิบ)
การแปลงเลขฐานสองในระบบ Excess-8 notation เป;น เลขฐานสิบ
หาไดIจาก
u คLาฐานสิบ (ระบบฐานสอง)– 8
u จงแปลง 11012 (Excess-8 notation) เป;นฐานสิบ
หาไดIจาก 13 - 8 = 5
ดังนั้น 11012 (Excess-8 notation) = 510
ตัวอยLาง
u 01112 (Excess-8 notation) เป;นฐานสิบ
u 10112 (Excess-8 notation) เป;นฐานสิบ
u 10002 (Excess-8 notation) เป;นฐานสิบ
15/77
Excess-16 notation (ฐานสองเป;นฐานสิบ)
การแปลงเลขฐานสองในระบบ Excess-16 notation เป;น เลขฐานสิบ หาไดIจาก
u คLาฐานสิบ (ระบบฐานสอง) – 16
u จงแปลง 110012 (Excess-16 notation) เป;นฐานสิบ
หาไดIจาก 25 - 16 = 9
ดังน้ัน 110012 (Excess-16 notation) = 910
ตัวอยLาง
u 010112 (Excess-16 notation) เป;นฐานสิบ
u 101012 (Excess-16 notation) เป;นฐานสิบ
u 100002 (Excess-16 notation) เป;นฐานสิบ
16/77
Excess-n notation (ฐานสองเป:นฐานสิบ)
สรุป การแปลงเลขฐานสองในระบบ Excess-n notation เป:น เลขฐานสิบ หาไดIจาก
u คLาฐานสิบ (ระบบฐานสอง) – n
17/77
การแปลงเลขฐานสิบเป2นเลขฐานสองในระบบ Excess-n notation
18/77
Excess-4 notation (ฐานสิบเป;นฐานสอง)
การแปลงเลขฐานสิบเป;นเลขฐานสองในระบบ Excess-4 notation
หาไดIจาก
u คLาฐานสิบ + 4 แลIวแปลงเป;นฐานสอง
u จงแปลง 210 เป;นฐานสอง (Excess-4 notation)
ตัวอยLาง
u 310 เป;นฐานสอง (Excess-4 notation)
u -310 เป;นฐานสอง (Excess-4 notation)
u 110 เป;นฐานสอง (Excess-4 notation)
19/77
การแปลงเลขฐานสิบเป3นเลขฐานสองในระบบ Excess-8 notation
หาไดGจาก
u คJาฐานสิบ + 8 แลGวแปลงเป3นฐานสอง
u จงแปลง 510 เป3นฐานสอง (Excess-8 notation)
ตัวอยJาง
u -110 เป3นฐานสอง (Excess-8 notation)
u 310 เป3นฐานสอง (Excess-8 notation)
u 010 เป3นฐานสอง (Excess-8 notation)
Excess-8 notation (ฐานสิบเป3นฐานสอง)
20/77
การแปลงเลขฐานสิบเป3นเลขฐานสองในระบบ Excess-16 notation
หาไดHจาก
u คKาฐานสิบ + 16 แลHวแปลงเป3นฐานสอง
u จงแปลง 910 เป3นฐานสอง (Excess-16 notation)
ตัวอยKาง
u -510 เป3นฐานสอง (Excess-16 notation)
u 1310 เป3นฐานสอง (Excess-16 notation)
u 010 เป3นฐานสอง (Excess-16 notation)
Excess-16 notation (ฐานสิบเป3นฐานสอง)
21/77
การแปลงเลขฐานสิบเป3นเลขฐานสองในระบบ Excess-n notation หาไดFจาก
u คIาฐานสิบ + n แลFวแปลงเป3นฐานสอง
Excess-n notation (ฐานสิบเป3นฐานสอง)
การจัดเก็บจำนวนจริงในระบบFloating point number
23/77
จำนวนจริงในระบบ Floating point number
u ในป?จจุบันเครื่องคอมพิวเตอรJสLวนใหญLจัดเก็บจำนวนจริงตาม
มาตรฐาน IEEE 754
u ขYอมูลชนิด single precision เชLน ขYอมูลชนิด float (32 บิต)
u ขYอมูลชนิด double precision เชLน ขYอมูลชนิด double (64 บิต)
u ใชYเรียนมีขนาด 8 บิต เรียกวLา Microfloat ใชYเปhนตัวอยLางใน
การศึกษาเทLานั้น เพื่อใหYเขYาใจไดYงLายไมLมีมาตรฐานใดๆรองรับ
24/77
จำนวนจริงในระบบ Floating point number
u ใช?หลักการเดียวกับตัวเลขทางวิทยาศาสตรN (Science notation)
u มาตรฐาน (Normal form) ในการเขียนจะมีตัวเลขหน?าจุด 1 ตัวและต?องไม\ใช\ศูนยN
u เช\น 1.0 x 103
6.0235 x 1023
1.2 x 10-6
-3.45 x 102
25/77
จำนวนจริงในระบบ Floating point number
u ส่ิงท่ีควรจัดเก็บในคอมพิวเตอรLคือ เลขยกกำลัง และ ตัวเลขดRานหนRา
u เชVน 6.45 x 103
u เลขยกกำลังคือ 3 เรียกวVา exponent
uตัวเลขดRานหนRา คือ 6.45 เรียกวVา significand หรือ mantissa
26/77
จำนวนจริงในระบบ Floating point number
u ดังนั้นจำนวนจริงในระบบ Floating point number ท่ี
คอมพิวเตอรJจัดเก็บคือ
u Exponent (เลขยกกำลัง) เปVนไดXท้ังบวกและลบ
u Significand (ตัวเลขดXานหนXา) เปVนไดXท้ังบวกและลบ
27/77
รูปแบบการจัดเก็บ Floating point number
u รูปแบบการจัดเก็บ Floating point number มี 3 สCวน คือ
u Sign bit (บิตเครื่องหมาย)
0 แทนจำนวนบวก
1 แทนจำนวนลบ
u Biased exponent (กำลังในระบบ Excess-n Notation)
u Significand
28/77
Biased exponent
Biased exponent หรือเลขยกกำลัง
u เป>นจำนวนเต็ม ชนิดมีเครื่องหมาย (สามารถเป>นไดPท้ังบวกและลบ)
u จะใชPวิธีการแทนดPวยระบบ Excess-n Notation
u ตัวอย]าง เลขฐานสอง (excess-4 notation) เริ่มจาก จำนวนลบท่ี
นPอยท่ีสุด คือ 000 เพิ่มขึ้นทีละหนึ่งเรื่อยๆจนถึงจำนวนบวกมากท่ีสุด
แต]เลขฐานสอง (2’complement) การปรับค]าระหว]างจำนวนลบ
และจำนวนบวกนั่นทำไดPยาก
u ดังนั้นเลขยกกำลัง (exponent) จึงใชP ระบบ Excess-n Notation ใน
การแทน เรียกว]า Biased exponent
29/77
Biased exponent
30/77
Microfloat
u ข/อมูลชนิด Microfloat คือจำนวนจริงท่ีจัดเก็บด/วยระบบ Floating point
number ท่ีใช/ในการศึกษา ซึ่งมีขนาด 8 บิต
ตัวอยZาง 01101011
u บิตท่ีมีนัยสำคัญสูงสุดเป`น 0 แสดงวZาเป`นจำนวนบวก
u Biased exponent เป`น 110
u Significand เป`น 1011
31/77
การแปลงจำนวนจริงฐานสิบเป5นจำนวนจริงฐานสอง (Microfloat)
32/77
ตัวอย*างท่ี 1 จงแปลง 4.510 เป;นจำนวนจริงฐานสอง (Microfloat)
ขั้นตอนท่ี 1 แปลงจำนวนจริงฐานสิบเป;นจำนวนจริงสอง
410 = 1002
0.510 แปลงเป;นฐานสองไดS
.5 x 2 = 1.00 เก็บ 1
.0 x 2 = 0.00 หยุด
เรียงผลคูณหนSาจุดจากบนลงล*าง จะไดS 0.510 = 0.12
ดังนั้น 4.510 = 100.12
33/77
ตัวอย)างท่ี 1
ขั้นตอนท่ี 2 จัดให9อยู)ในรูป normal form โดยตัวเลขหลังจุด
ตัวแรกต9องเปJน 1 และไม)มีเลขตัวหน9าจุด (เลขหน9าจุดเปJนศูนยP)
จาก 100.1
10.01 x 21
1.001 x 22
.1001 x 23 เปJน normal form แล9ว
u ดังนั้น significand คือ 1001
u exponent คือ 3
34/77
ตัวอย*างท่ี 1
ขั้นตอนท่ี 3 แปลง exponent เป?น biased exponent (excess-4 notation)
u exponent คือ 310 แปลง เป?น biased exponent
โดย 3 + 4 = 7 และ 710 = 1112
u ดั้งนั้น biased exponent คือ 1112
35/77
ตัวอย*างท่ี 1 สรุป
u เนื่องจาก 4.510 เป>นจำนวนบวก ฉะนั้นบิตเครื่องหมายคือ 0
u biased exponent คือ 111
u significand คือ 1001
u ดังนั้น 4.510 = 011110012 (Microfloat)
36/77
ตัวอย*างท่ี 2
จงแปลง 0.7510 เป;นจำนวนจริงฐานสอง (Microfloat)
ขั้นตอนท่ี 1 แปลงจำนวนจริงฐานสิบเป;นจำนวนจริงสอง
37/77
ตัวอย)างท่ี 2
ขั้นตอนท่ี 2 จัดให8อยู)ในรูป normal form โดยตัวเลขหลังจุด
ตัวแรกต8องเปIน 1 และไม)มีเลขตัวหน8า (หน8าจุดเปIนศูนยP)
38/77
ตัวอย*างท่ี 2 ขั้นตอนท่ี 3 แปลง exponent เป?น biased exponent (excess-4 notation)
39/77
ตัวอย*างท่ี 2
สรุป
u เนื่องจาก 0.7510 เป?นจำนวนบวก บิตเครื่องหมายคือ
u biased exponent คือ
u significand คือ
u ดังนั้น 0.7510 =
40/77
ตัวอย*างท่ี 3
จงแปลง -3.2510
เป<นจำนวนจริงฐานสอง (Microfloat)
ขั้นตอนท่ี 1 แปลงจำนวนจริงฐานสิบเป<นจำนวนจริงสอง
41/77
ตัวอย*างท่ี 3
ขั้นตอนท่ี 2 จัดให:อยู*ในรูป normal form โดยตัวเลขหลังจุด
ตัวแรกต:องเปKน 1 และไม*มีเลขตัวหน:า (หน:าจุดเปKนศูนยQ)
42/77
ตัวอย*างท่ี 3 ขั้นตอนท่ี 3 แปลง exponent เป?น biased exponent (excess-4 notation)
43/77
ตัวอย*างท่ี 3
สรุป
u เนื่องจาก -3.2510 เป@นจำนวนลบ บิตเครื่องหมายคือ
u biased exponent คือ
u significand คือ
u ดังนั้น -3.2510 =
44/77
ตัวอย)างท่ี 4
จงแปลง -0.37510 เป;นจำนวนจริงฐานสอง (Microfloat)
ขั้นตอนท่ี 1 แปลงจำนวนจริงฐานสิบเป;นจำนวนจริงสอง
45/77
ตัวอย*างท่ี 4
ขั้นตอนท่ี 2 จัดให9อยู*ในรูป normal form โดยตัวเลขหลังจุดตัวแรกต9องเปJน 1 และไม*มีเลขตัวหน9า (หน9าจุดเปJนศูนยQ)
46/77
ตัวอย*างท่ี 4
ขั้นตอนท่ี 3 แปลง exponent เป?น biased exponent (excess-4 notation)
47/77
ตัวอย)างท่ี 4
สรุป
u เนื่องจาก -0.37510 เป?นจำนวนลบ บิตเครื่องหมายคือ
u biased exponent คือ
u significand คือ
u ดังนั้น -0.37510 =
48/77
ตัวอย*างท่ี 5 จงแปลง -0.5410 เป;นจำนวนจริงฐานสอง (Microfloat)
ขั้นตอนท่ี 1 แปลงจำนวนจริงฐานสิบเป;นจำนวนจริงสอง
49/77
ตัวอย*างท่ี 5
ขั้นตอนท่ี 2 จัดให:อยู*ในรูป normal form โดยตัวเลขหลังจุด
ตัวแรกต:องเปKน 1 และไม*มีเลขตัวหน:า (หน:าจุดเปKนศูนยR)
50/77
ตัวอย*างท่ี 5 ขั้นตอนท่ี 3 แปลง exponent เป?น biased exponent (excess-4 notation)
51/77
ตัวอย*างท่ี 5
สรุป
u เนื่องจาก -0.5410 เป>นจำนวนลบ บิตเครื่องหมายคือ
u biased exponent คือ
u significand คือ
u ดังนั้น -0.5410 =
52/77
การแปลงจำนวนจริงฐานสอง (Microfloat )เปAน จำนวนจริงฐานสิบ
53/77
ตัวอย*างท่ี 1
จงแปลง 011110012
(Microfloat) เปDนจำนวนจริงฐานสิบ
ขั้นตอนท่ี 1 แยกองคPประกอบ
u บิตเครื่องหมายเปDน 0 แสดงว*าเปDนจำนวนบวก
u biased exponent คือ 1112
u significand คือ 10012
54/77
ตัวอย*างท่ี 1
ขั้นตอนท่ี 2 Biased exponent
u biased exponent คือ 1112 = 710 (จำนวนเต็มไม*มีเครื่องหมาย)
u exponent = biased exponent – 4
exponent = 7 - 4
exponent = 3
u ดังนั้น exponent คือ 310
55/77
ตัวอย)างท่ี 1ขั้นตอนท่ี 3 Significandu Significand คือ 10012
.1001 x 23
1.001 x 22
10.01 x 21
100.1 x 20 << หยุดu จำนวนจริงฐานสอง คือ 100.12
56/77
ตัวอย*างท่ี 1
ขั้นตอนท่ี 4 แปลงจำนวนจริงฐานสองเป@นจำนวนจริงฐานสิบ
100.12à จำนวนจริงฐาน
10
u ค*าหนGาจุด 1002
= 410
u ค*าหลังจุด 1 x 0.5 = 0.510
u ดังนั้น 011110012
(Microfloat) = 4.510
57/77
ตัวอย)างท่ี 2
จงแปลง 101111002 (Microfloat) เปCนจำนวนจริงฐานสิบ
ขั้นตอนท่ี 1 แยกองคOประกอบ
u บิตเครื่องหมาย
u biased exponent คือ
u significand คือ
58/77
ตัวอย*างท่ี 2ขั้นตอนท่ี 2 Biased exponent
59/77
ตัวอย*างท่ี 2
ขั้นตอนท่ี 3 Significand
60/77
ตัวอย*างท่ี 2
ขั้นตอนท่ี 4 แปลงจำนวนจริงฐานสองเป@นจำนวนจริงฐานสิบ
61/77
ตัวอย*างท่ี 3
จงแปลง 001011002(Microfloat) เปDนจำนวนจริงฐานสิบ
ขั้นตอนท่ี 1 แยกองคPประกอบ
62/77
ตัวอย*างท่ี 3ขั้นตอนท่ี 2 Biased exponent
63/77
ตัวอย*างท่ี 3ขั้นตอนท่ี 3 significand
64/77
ตัวอย*างท่ี 3
ขั้นตอนท่ี 4 แปลงจำนวนจริงฐานสองเป?นจำนวนจริงฐานสิบ
65/77
ตัวอย*างท่ี 4
จงแปลง 110010002 (Microfloat) เปEนจำนวนจริงฐานสิบ
ขั้นตอนท่ี 1 แยกองคQประกอบ
66/77
ตัวอย)างท่ี 4ขั้นตอนท่ี 2 Biased exponent
67/77
ตัวอย)างท่ี 4ขั้นตอนท่ี 3 significand
68/77
ตัวอย*างท่ี 4
ขั้นตอนท่ี 4 แปลงจำนวนจริงฐานสองเป?นจำนวนจริงฐานสิบ
69/77
FLOAT
u ข+อมูลชนิด float ในภาษา JAVA มีขนาด 32 บิต
u บิตเครื่องหมาย 1 บิต
u Biased exponent 8 บิต (excess 128 notation)
u Significand 23 บิต
70/77
Double
u ข+อมูลชนิด double ในภาษา JAVA มีขนาด 64 บิต
u บิตเครื่องหมาย 1 บิต
u Biased exponent 11 บิต (excess 1024 notation)
u Significand 52 บิต
ป"ญหาของ floating point number
72/77
Truncation error
ความผิดพลาดท่ีเกิดจากการตัดจำนวนบิตสEวนเกิน
u ตัวอยEาง 2.625
1. แปลงเปOนจำนวนจริงฐานสอง ไดR 10.101
2. จัดใหRอยูEในรูป normal form ไดR 0.10101 x 22
3. exponent คือ 2+4 = 6, biased exponent 610
= 1102
4. ดังนั้น 2.625 = 011010102(floating point)
73/77
Truncation error
u เม่ือแปลง 011010102(floating point) เปAนจำนวนจริงฐานสิบ
1. Sign bit = 0, biased exponent = 110, significant = 1010
2. biased exponent 110 = 6, exponent = 6-4 = 2
3. จาก 0.1010 x 22 จะได[ 10.10 x 20
4. 10.102 = 2.510
****จะเห็นว`าค̀าท่ีได[ไม̀เท̀ากับค̀าเดิม
74/77
Truncation error
ทำให3เกิดป9ญหากับการคำนวณเลขในระบบ floating point
ขนาด 8 บิต เชMน
2.50 + 0.125 + 0.125
2.50 + 0.125 = 2.625
แตMจัดเก็บได3แคM 2.5
เม่ือนำ 2.5 + 0.125 = 2.625
ก็จะเกิดป9ญหาเชMนเดิม คือ เก็บได3แคM 2.5
75/77
Truncation error
จากตัวอย7างเดิม 2.50 + 0.125 + 0.125
หากบวก 0.125 + 0.125 ก7อน จะไดG 0.25
เม่ือแปลงเปMนจำนวนจริงฐานสองไดG 0.01
ซึ่งสามารถจัดเก็บในระบบ floating point 8 บิตไดG คือ 01011000
จากนั้นนำ 0.25 + 2.50 จะไดG 2.75
เม่ือแปลงเปMนจำนวนจริงฐานสองไดG 10.11
ซึ่งสามารถจัดเก็บในระบบ floating point 8 บิตไดG คือ 01101011
76/77
Truncation error
u ดังนั้นในกรณีท่ีต<องการความแมCนยำสูงในการคำนวณตัวเลขใน
ระบบ floating point ควรดำเนินการบวกคCาท่ีมีจำนวนน<อยเข<า
กันกCอน จากนั้นจึงคCอยนำไปรวมเข<ากับจำนวนขนาดใหญC
u ทำให<ชCวยลดความผิดพลาดในการคำนวณลงได<
77/77
การเท(ากันของ floating point number
ถ>าประกาศตัวแปร double x, y;
u if(x==y) โอกาสท่ีเง่ือนไขจะเปTนจริงน>อย เนื่องจากท้ัง 64
บิตจะต>องเหมือนกันทุกบิต
u เพราะฉะนั้นในการเปรียบเทียบ เราต>องกำหนดให> x กับ y
ต(างกันแค(ไหนท่ีเราจะยอมรับให>เปTนตัวเดียวกัน
u if(Math.abs(x-y) < 0.0001) ถือว(าเท(ากันแล>ว ขึ้นอยู(กับ
งานของเราว(าต>องการมากน>อยแค(ไหน