1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID MALAN: Lad os nu blæse din hjerne. 3 00:00:01,750 --> 00:00:06,500 Det viser sig i den virkelige verden 1 divideret med 10 er faktisk 1/10 eller 0,1. 4 00:00:06,500 --> 00:00:10,370 Men i computere, der kun har en begrænset Antallet af bits, som til 5 00:00:10,370 --> 00:00:14,290 repræsentere tal, kan du ikke altid repræsentere tal som 1/10 med 6 00:00:14,290 --> 00:00:15,500 perfekt præcision. 7 00:00:15,500 --> 00:00:18,640 Med andre ord computere undertiden at foretage vurderinger og ikke 8 00:00:18,640 --> 00:00:22,740 nødvendigvis repræsenterer det nummer, du ønsker så præcist som du ønsker. 9 00:00:22,740 --> 00:00:27,020 >> For eksempel antage, jeg går tilbage til dette program og ændre 0,1 til, 10 00:00:27,020 --> 00:00:32,073 åh, 0,28, hvilket indikerer, at Jeg vil gerne printf til printf til 11 00:00:32,073 --> 00:00:34,350 28 steder af præcision. 12 00:00:34,350 --> 00:00:39,330 Lad os nu gemme og kompilere programmet, denne gang med make floats2. 13 00:00:39,330 --> 00:00:41,910 Kør det med dot skråstreg floats2. 14 00:00:41,910 --> 00:00:49,980 Og, kære Gud, denne gang jeg ser ikke 0,1, men 0.10000000, hvilket er temmelig 15 00:00:49,980 --> 00:00:51,070 godt hidtil. 16 00:00:51,070 --> 00:00:57,830 Men så, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Nå, hvad sker der? 18 00:00:58,880 --> 00:01:02,280 Tja, det viser sig, at en float er opbevares typisk inde i en computer 19 00:01:02,280 --> 00:01:03,500 med 32 bit. 20 00:01:03,500 --> 00:01:07,340 32 er naturligvis et endeligt antal, som indebærer, at du kun kan repræsentere 21 00:01:07,340 --> 00:01:11,050 med 32 bit et endeligt antal af floating point-værdier. 22 00:01:11,050 --> 00:01:14,980 Desværre, det betyder, at computer kan ikke repræsentere alle mulige 23 00:01:14,980 --> 00:01:18,110 floating point tal eller reelle tal, der findes i verden, 24 00:01:18,110 --> 00:01:19,980 fordi den kun har så mange bits. 25 00:01:19,980 --> 00:01:23,940 >> Og så, hvad computeren er tilsyneladende gjort i dette tilfælde udgør 1/10 til 26 00:01:23,940 --> 00:01:26,880 den tættest mulige flydende pointværdi, at det kan. 27 00:01:26,880 --> 00:01:31,050 Men hvis vi ser, som vi har her, til 28 decimaler, begynder vi at se, at 28 00:01:31,050 --> 00:01:31,970 upræcise. 29 00:01:31,970 --> 00:01:34,480 Så dette er et problem med ingen perfekt løsning. 30 00:01:34,480 --> 00:01:38,060 Vi kan bruge en dobbelt i stedet for en svømmer, som har en tendens til at anvende 64 bit som 31 00:01:38,060 --> 00:01:39,410 modsætning til 32. 32 00:01:39,410 --> 00:01:42,290 Men selvfølgelig, 64 er også begrænset, så problemet vil 33 00:01:42,290 --> 00:01:43,630 forblive selv med double. 34 00:01:43,630 --> 00:01:46,323