1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Ni nun blovi vian menson. 3 00:00:01,750 --> 00:00:06,500 Ĝi rezultas en la reala mondo 1 dividita per 10 Estas ja 1/10, aŭ 0.1. 4 00:00:06,500 --> 00:00:10,370 Sed en komputiloj kiuj havas nur finian nombro de bitoj kun kiu 5 00:00:10,370 --> 00:00:14,290 reprezenti nombrojn, vi ne povas ĉiam reprezenti nombrojn kiel 1/10 kun 6 00:00:14,290 --> 00:00:15,500 perfekta precizeco. 7 00:00:15,500 --> 00:00:18,640 En aliaj vortoj, komputiloj kelkfoje havas por fari jugxon nomitaj kaj ne 8 00:00:18,640 --> 00:00:22,740 nepre reprezentas la numeron vi senhaveco kiel ĝuste kiel vi celas. 9 00:00:22,740 --> 00:00:27,020 >> Ekzemple, supozu Mi iros returne en tiun programon kaj ŝanĝi la 0,1 al, 10 00:00:27,020 --> 00:00:32,073 oh, 0.28, tiel indikante ke Mi ŝatus printf al printf al 11 00:00:32,073 --> 00:00:34,350 28 lokoj de precizeco. 12 00:00:34,350 --> 00:00:39,330 Ni nun savu kaj kompili la programon, tiu tempo kun make floats2. 13 00:00:39,330 --> 00:00:41,910 Ruli ĝin per skalara oblikvo floats2. 14 00:00:41,910 --> 00:00:49,980 Kaj, kara Dio, ĉifoje mi ne vidas 0.1, sed 0.10000000, kiu estas bela 15 00:00:49,980 --> 00:00:51,070 bona ĝis nun. 16 00:00:51,070 --> 00:00:57,830 Sed tiam, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Nu, kio okazas? 18 00:00:58,880 --> 00:01:02,280 Nu, tio rezultas ke float estas tipe konservataj ene de komputilo 19 00:01:02,280 --> 00:01:03,500 kun 32 bitoj. 20 00:01:03,500 --> 00:01:07,340 32 estas evidente finia nombro, kiun implicas ke oni povas nur reprezentas 21 00:01:07,340 --> 00:01:11,050 kun 32 bitoj finia nombro de flosanta punkto valoroj. 22 00:01:11,050 --> 00:01:14,980 Bedaŭrinde, tio signifas, ke la komputilo ne povas reprezenti tutan eblan 23 00:01:14,980 --> 00:01:18,110 flosantaj punktaj nombroj, aŭ realaj nombroj, kiuj ekzistas en la mondo, 24 00:01:18,110 --> 00:01:19,980 ĉar ĝi havas nur tiom da bitoj. 25 00:01:19,980 --> 00:01:23,940 >> Kaj do, kion la komputilo estas ŝajne farita en ĉi tiu kazo estas reprezenti 1/10 ĝis 26 00:01:23,940 --> 00:01:26,880 la plej proksima ebla glitpunkta punkto valoro kiun ĝi povas. 27 00:01:26,880 --> 00:01:31,050 Sed se ni rigardos, kiel ni havas ĉi tie, ĝis la 28 dekumaj lokoj, ni komencas vidi, ke 28 00:01:31,050 --> 00:01:31,970 imprecision. 29 00:01:31,970 --> 00:01:34,480 Do tiu estas problemo kun neniu perfekta solvo. 30 00:01:34,480 --> 00:01:38,060 Ni povas uzi duoblan anstataŭ kaleŝego, kio emas uzi 64 bitojn kiel 31 00:01:38,060 --> 00:01:39,410 kontraste al 32. 32 00:01:39,410 --> 00:01:42,290 Sed kompreneble, 64 ankaŭ estas finia, do la problemo estos 33 00:01:42,290 --> 00:01:43,630 resti eĉ kun duoblaj. 34 00:01:43,630 --> 00:01:46,323