1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> დავით Malan: მოდით ახლა აფეთქება თქვენი გონება. 3 00:00:01,750 --> 00:00:06,500 თურმე რეალურ სამყაროში 1 გაყოფილი 10 მართლაც 1/10, ან 0.1. 4 00:00:06,500 --> 00:00:10,370 მაგრამ კომპიუტერი, რომელიც მხოლოდ სასრულ რაოდენობის ბიტი, რომელიც 5 00:00:10,370 --> 00:00:14,290 წარმოადგენს ნომრები, თქვენ არ შეგიძლიათ ყოველთვის წარმოადგენს ნომერი: 1/10 6 00:00:14,290 --> 00:00:15,500 შესანიშნავი სიზუსტით. 7 00:00:15,500 --> 00:00:18,640 სხვა სიტყვებით, კომპიუტერი ზოგჯერ რათა განაჩენი ზარები და არა 8 00:00:18,640 --> 00:00:22,740 აუცილებლად წარმოადგენს რაოდენობა თქვენ მინდა, როგორც ზუსტად რაც თქვენ ვაპირებთ. 9 00:00:22,740 --> 00:00:27,020 >> მაგალითად, ვფიქრობ, მე დაბრუნდეს ამ პროგრამის და შეცვალოს 0.1, 10 00:00:27,020 --> 00:00:32,073 oh, 0.28, რაც მიუთითებს, რომ მინდა printf to printf to 11 00:00:32,073 --> 00:00:34,350 28 ადგილებში სიზუსტით. 12 00:00:34,350 --> 00:00:39,330 მოდით ახლა გადარჩენა და შეადგინონ პროგრამა, ამ დროს მიიღოს floats2. 13 00:00:39,330 --> 00:00:41,910 გაუშვით dot slash floats2. 14 00:00:41,910 --> 00:00:49,980 და, ძვირფასო ღმერთო, ამ დროს ვხედავ არა 0.1, მაგრამ 0.10000000, რომელიც საკმაოდ 15 00:00:49,980 --> 00:00:51,070 კარგი ჯერჯერობით. 16 00:00:51,070 --> 00:00:57,830 მაგრამ შემდეგ, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> ისე, რა ხდება? 18 00:00:58,880 --> 00:01:02,280 ასევე, ირკვევა, რომ float არის როგორც წესი, ინახება შიგნით კომპიუტერი 19 00:01:02,280 --> 00:01:03,500 32 ბიტი. 20 00:01:03,500 --> 00:01:07,340 32 აშკარად სასრულ ნომერი, რომელიც იმას ნიშნავს, რომ თქვენ შეგიძლიათ მხოლოდ წარმოადგენს 21 00:01:07,340 --> 00:01:11,050 32 ბიტი სასრულ ნომერი მცურავი პუნქტიანი ღირებულებებს. 22 00:01:11,050 --> 00:01:14,980 სამწუხაროდ, ეს იმას ნიშნავს რომ კომპიუტერული ვერ წარმოადგენს ყველა შესაძლო 23 00:01:14,980 --> 00:01:18,110 მცურავი პუნქტიანი ნომერი, ან რეალური ნომრები, რომ არსებობს მსოფლიოში, 24 00:01:18,110 --> 00:01:19,980 რადგან იგი მხოლოდ აქვს ამდენი ბიტი. 25 00:01:19,980 --> 00:01:23,940 >> და მერე რა, კომპიუტერის, როგორც ჩანს, გაკეთდეს ამ შემთხვევაში წარმოადგენს 1/10 26 00:01:23,940 --> 00:01:26,880 უახლოესი შესაძლებელია მცურავი წერტილი ღირებულება, რომელიც მას შეუძლია. 27 00:01:26,880 --> 00:01:31,050 მაგრამ თუ დავაკვირდებით, როგორც ჩვენ აქ, 28 ათობითი ადგილებში, ჩვენ ვიწყებთ ვხედავთ, რომ 28 00:01:31,050 --> 00:01:31,970 ორაზროვნება. 29 00:01:31,970 --> 00:01:34,480 ასე რომ, ეს პრობლემა სრულყოფილი გადაწყვეტა. 30 00:01:34,480 --> 00:01:38,060 ჩვენ შეგვიძლია გამოვიყენოთ ორმაგი ნაცვლად float, რომელიც tends უნდა გამოიყენოს 64 ბიტი, როგორც 31 00:01:38,060 --> 00:01:39,410 განსხვავებით 32. 32 00:01:39,410 --> 00:01:42,290 მაგრამ, რა თქმა უნდა, 64 ასევე სასრულ, ასე რომ, პრობლემა 33 00:01:42,290 --> 00:01:43,630 დარჩება თუნდაც ორჯერ. 34 00:01:43,630 --> 00:01:46,323