>> დავით Malan: მოდით ახლა აფეთქება თქვენი გონება.
თურმე რეალურ სამყაროში 1 გაყოფილი 10 მართლაც 1/10, ან 0.1.
მაგრამ კომპიუტერი, რომელიც მხოლოდ სასრულ რაოდენობის ბიტი, რომელიც
წარმოადგენს ნომრები, თქვენ არ შეგიძლიათ ყოველთვის წარმოადგენს ნომერი: 1/10
შესანიშნავი სიზუსტით.
სხვა სიტყვებით, კომპიუტერი ზოგჯერ რათა განაჩენი ზარები და არა
აუცილებლად წარმოადგენს რაოდენობა თქვენ მინდა, როგორც ზუსტად რაც თქვენ ვაპირებთ.
>> მაგალითად, ვფიქრობ, მე დაბრუნდეს ამ პროგრამის და შეცვალოს 0.1,
oh, 0.28, რაც მიუთითებს, რომ მინდა printf to printf to
28 ადგილებში სიზუსტით.
მოდით ახლა გადარჩენა და შეადგინონ პროგრამა, ამ დროს მიიღოს floats2.
გაუშვით dot slash floats2.
და, ძვირფასო ღმერთო, ამ დროს ვხედავ არა 0.1, მაგრამ 0.10000000, რომელიც საკმაოდ
კარგი ჯერჯერობით.
მაგრამ შემდეგ, 14901161193847656250.
>> ისე, რა ხდება?
ასევე, ირკვევა, რომ float არის როგორც წესი, ინახება შიგნით კომპიუტერი
32 ბიტი.
32 აშკარად სასრულ ნომერი, რომელიც იმას ნიშნავს, რომ თქვენ შეგიძლიათ მხოლოდ წარმოადგენს
32 ბიტი სასრულ ნომერი მცურავი პუნქტიანი ღირებულებებს.
სამწუხაროდ, ეს იმას ნიშნავს რომ კომპიუტერული ვერ წარმოადგენს ყველა შესაძლო
მცურავი პუნქტიანი ნომერი, ან რეალური ნომრები, რომ არსებობს მსოფლიოში,
რადგან იგი მხოლოდ აქვს ამდენი ბიტი.
>> და მერე რა, კომპიუტერის, როგორც ჩანს, გაკეთდეს ამ შემთხვევაში წარმოადგენს 1/10
უახლოესი შესაძლებელია მცურავი წერტილი ღირებულება, რომელიც მას შეუძლია.
მაგრამ თუ დავაკვირდებით, როგორც ჩვენ აქ, 28 ათობითი ადგილებში, ჩვენ ვიწყებთ ვხედავთ, რომ
ორაზროვნება.
ასე რომ, ეს პრობლემა სრულყოფილი გადაწყვეტა.
ჩვენ შეგვიძლია გამოვიყენოთ ორმაგი ნაცვლად float, რომელიც tends უნდა გამოიყენოს 64 ბიტი, როგორც
განსხვავებით 32.
მაგრამ, რა თქმა უნდა, 64 ასევე სასრულ, ასე რომ, პრობლემა
დარჩება თუნდაც ორჯერ.