1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Imos agora explotar a súa mente. 3 00:00:01,750 --> 00:00:06,500 Acontece que no mundo real 1 dividido por 10 é efectivamente 1/10, ou 0,1. 4 00:00:06,500 --> 00:00:10,370 Pero, en ordenadores que só ten un finito número de bits co que 5 00:00:10,370 --> 00:00:14,290 representar números, non poderá representar números como 1/10 en 6 00:00:14,290 --> 00:00:15,500 precisión perfecta. 7 00:00:15,500 --> 00:00:18,640 Noutras palabras, ás veces, teñen ordenadores para facer chamadas de xuízo e non 8 00:00:18,640 --> 00:00:22,740 representan, necesariamente, o número que quero tan precisamente como pretende. 9 00:00:22,740 --> 00:00:27,020 >> Por exemplo, supoñamos que eu volva para este programa e cambiar a 0,1 e, 10 00:00:27,020 --> 00:00:32,073 Oh, 0,28, o que indica que Gustaríame printf para printf para 11 00:00:32,073 --> 00:00:34,350 28 locais de precisión. 12 00:00:34,350 --> 00:00:39,330 Imos agora gardar e compilar o programa, esta vez con make floats2. 13 00:00:39,330 --> 00:00:41,910 Executa-o con un punto floats2 barra. 14 00:00:41,910 --> 00:00:49,980 E, meu Deus, esta vez eu non ver 0,1, pero 0.10000000, que é moi 15 00:00:49,980 --> 00:00:51,070 bo ata agora. 16 00:00:51,070 --> 00:00:57,830 Pero entón, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Ben, o que está a suceder? 18 00:00:58,880 --> 00:01:02,280 Ben, acontece que un float é tipicamente almacenados dentro dun ordenador 19 00:01:02,280 --> 00:01:03,500 con 32 bits. 20 00:01:03,500 --> 00:01:07,340 32 é, obviamente, un número finito, que implica que só se pode representar 21 00:01:07,340 --> 00:01:11,050 con 32 bits un número finito de valores de punto flotante. 22 00:01:11,050 --> 00:01:14,980 Por desgraza, isto significa que o ordenador non pode representar as posibles 23 00:01:14,980 --> 00:01:18,110 números de punto flotante, ou números reais, que existen no mundo, 24 00:01:18,110 --> 00:01:19,980 porque só ten tantos bits. 25 00:01:19,980 --> 00:01:23,940 >> E así que o ordenador é aparentemente feito neste caso é representar 1/10 a 26 00:01:23,940 --> 00:01:26,880 o máis próximo posible flotante valor do punto que pode. 27 00:01:26,880 --> 00:01:31,050 Pero se olharmos, como temos aquí, a 28 de cifras decimais, comezamos a ver que 28 00:01:31,050 --> 00:01:31,970 imprecisión. 29 00:01:31,970 --> 00:01:34,480 Polo tanto, este é un problema co ningunha solución perfecta. 30 00:01:34,480 --> 00:01:38,060 Podemos usar unha parella en vez de un coche alegórico, que tende a usar 64 bits como 31 00:01:38,060 --> 00:01:39,410 canto de 32. 32 00:01:39,410 --> 00:01:42,290 Pero, claro, 64 tamén é finito, entón o problema vai 33 00:01:42,290 --> 00:01:43,630 permanecen mesmo con dobres. 34 00:01:43,630 --> 00:01:46,323