1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID MALAN: Låt oss nu blåsa dig. 3 00:00:01,750 --> 00:00:06,500 Det visar sig i den verkliga världen 1 delat genom 10 är verkligen 1/10 eller 0,1. 4 00:00:06,500 --> 00:00:10,370 Men i datorer som endast har en begränsad antalet bitar med vilka till 5 00:00:10,370 --> 00:00:14,290 representera siffror, kan du inte alltid representera tal som 1/10 med 6 00:00:14,290 --> 00:00:15,500 perfekt precision. 7 00:00:15,500 --> 00:00:18,640 Med andra ord, datorer har ibland för att göra dom samtal och inte 8 00:00:18,640 --> 00:00:22,740 nödvändigtvis det nummer du vill så exakt som du tänker. 9 00:00:22,740 --> 00:00:27,020 >> Anta att jag går tillbaka till detta program och ändra 0,1 till, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, vilket visar att Jag skulle vilja printf att printf till 11 00:00:32,073 --> 00:00:34,350 28 platser för precision. 12 00:00:34,350 --> 00:00:39,330 Låt oss nu spara och kompilera programmet, denna gång med make floats2. 13 00:00:39,330 --> 00:00:41,910 Kör det med punkt snedstreck floats2. 14 00:00:41,910 --> 00:00:49,980 Och, käre Gud, den här gången ser jag inte 0.1, men 0.10000000, vilket är ganska 15 00:00:49,980 --> 00:00:51,070 bra så här långt. 16 00:00:51,070 --> 00:00:57,830 Men sedan, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Tja, vad som händer? 18 00:00:58,880 --> 00:01:02,280 Jo, det visar sig att en flottör är vanligtvis lagras inuti en dator 19 00:01:02,280 --> 00:01:03,500 med 32 bitar. 20 00:01:03,500 --> 00:01:07,340 32 är uppenbarligen ett begränsat antal, vilket innebär att du bara kan representera 21 00:01:07,340 --> 00:01:11,050 med 32 bitar ett ändligt antal av flyttalsvärden. 22 00:01:11,050 --> 00:01:14,980 Tyvärr innebär det att Datorn kan inte representera alla möjliga 23 00:01:14,980 --> 00:01:18,110 flyttal, eller reella tal, som finns i hela världen, 24 00:01:18,110 --> 00:01:19,980 eftersom den bara har så många bitar. 25 00:01:19,980 --> 00:01:23,940 >> Och så vad datorn är tydligen gjort i detta fall utgör 1/10 till 26 00:01:23,940 --> 00:01:26,880 närmast möjliga flytande poängvärde att det kan. 27 00:01:26,880 --> 00:01:31,050 Men om vi ser, som vi har här, till 28 decimaler, börjar vi se att 28 00:01:31,050 --> 00:01:31,970 inexakthet. 29 00:01:31,970 --> 00:01:34,480 Så detta är ett problem med ingen perfekt lösning. 30 00:01:34,480 --> 00:01:38,060 Vi kan använda en dubbel i stället för en flottör, som tenderar att använda 64 bitar som 31 00:01:38,060 --> 00:01:39,410 motsatt till 32. 32 00:01:39,410 --> 00:01:42,290 Men naturligtvis, är 64 också ändlig, så att problemet kommer att 33 00:01:42,290 --> 00:01:43,630 kvarstå även med dubbel. 34 00:01:43,630 --> 00:01:46,323