1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> David MALAN: ngayon pumutok ang iyong isip Hayaan. 3 00:00:01,750 --> 00:00:06,500 Ito ay lumiliko out sa tunay na mundo 1 hinati sa pamamagitan ng 10 talaga ang 1/10, o 0.1. 4 00:00:06,500 --> 00:00:10,370 Ngunit sa mga computer na may isang may hangganan lamang bilang ng mga piraso sa kung alin ang 5 00:00:10,370 --> 00:00:14,290 kumakatawan sa mga numero, hindi mo makakaya palaging kumakatawan sa mga numero tulad ng 1/10 sa 6 00:00:14,290 --> 00:00:15,500 perpektong katumpakan. 7 00:00:15,500 --> 00:00:18,640 Sa ibang salita, mga computer minsan ay may upang gumawa ng mga tawag paghatol at hindi 8 00:00:18,640 --> 00:00:22,740 kinakailangang kumakatawan sa bilang mo Gusto bilang tumpak na bilang nilayon mo. 9 00:00:22,740 --> 00:00:27,020 >> Halimbawa, ipagpalagay na pumunta ako pabalik sa ito programa at baguhin ang mga 0.1 sa, 10 00:00:27,020 --> 00:00:32,073 oh, 0.28, at sa gayon ay nagpapahiwatig na Gusto ko ng printf sa printf sa 11 00:00:32,073 --> 00:00:34,350 28 mga lugar ng katumpakan. 12 00:00:34,350 --> 00:00:39,330 Hayaan ngayong i-save at sumulat ng libro sa programa, sa pagkakataong ito kasama make floats2. 13 00:00:39,330 --> 00:00:41,910 Patakbuhin ito sa tuldok slash floats2. 14 00:00:41,910 --> 00:00:49,980 At, mahal na Diyos, ngayon hindi ko makita ang 0.1, ngunit 0.10000000, na kung saan ay medyo 15 00:00:49,980 --> 00:00:51,070 mabuti sa ngayon. 16 00:00:51,070 --> 00:00:57,830 Ngunit pagkatapos, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Well, ano kaya ang nangyari? 18 00:00:58,880 --> 00:01:02,280 Well, ito ay lumiliko out na ang isang float ay Karaniwang naka-imbak sa loob ng isang computer 19 00:01:02,280 --> 00:01:03,500 may 32 bits. 20 00:01:03,500 --> 00:01:07,340 32 ay malinaw naman isang may hangganan bilang, na nagpapahiwatig na maaari ka lamang kumatawan 21 00:01:07,340 --> 00:01:11,050 may 32 bit sa isang tiyak na numero ng mga lumulutang na mga halaga ng point. 22 00:01:11,050 --> 00:01:14,980 Sa kasamaang-palad, ay nangangahulugan na na ang Hindi maaaring kumatawan sa lahat ng posibleng mga computer na 23 00:01:14,980 --> 00:01:18,110 lumulutang na tuldok numero, o real numero, na umiiral sa mundo, 24 00:01:18,110 --> 00:01:19,980 dahil lamang mayroon itong napakaraming mga bits. 25 00:01:19,980 --> 00:01:23,940 >> At kaya kung ano ang tila ang computer tapos na sa kasong ito ay kumakatawan sa 1/10 sa 26 00:01:23,940 --> 00:01:26,880 ang pinakamalapit na posibleng lumulutang value point na maaari itong. 27 00:01:26,880 --> 00:01:31,050 Ngunit kung masaya naming, pati na mayroon kami dito, sa 28 decimal place, simulan namin upang makita na 28 00:01:31,050 --> 00:01:31,970 imprecision. 29 00:01:31,970 --> 00:01:34,480 Kaya ito ay isang problema sa walang perpektong solusyon. 30 00:01:34,480 --> 00:01:38,060 Maaari kaming gumamit ng isang double sa halip ng isang float, na kung saan ay may gawi na gamitin ang 64 bit bilang 31 00:01:38,060 --> 00:01:39,410 kabaligtaran sa 32. 32 00:01:39,410 --> 00:01:42,290 Ngunit siyempre, 64 ding may hangganan, kaya habilin ang problema 33 00:01:42,290 --> 00:01:43,630 mananatiling kahit na sa doubles. 34 00:01:43,630 --> 00:01:46,323