Приклад проблеми пов'язаної з перетіворенням типів.
Задача. Вводиться дійсне число - значення суми грошей (наприклад, 12.32). Вивести у форматі: G grn K kop (наприклад, 12 grn 32 kop).
Учень написав:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
float m;
int grn, kop;
cin>>m;
grn=m;
kop=(m-grn)*100;
cout<<grn<<" grn "<<kop<< " kop";
getch();
return 0;
}
Комп'ютер видав: 12 grn 31 kop
Я розумію, що програма не найраціональніша і що при перетворенні типів можлива втрата точності, але така велика! Навіть якщо ввести 0.32, то отримаємо 0 grn 31 kop. Це ж друга значуща цифра! Учень робив у DevCpp, я перевірив у Visual C++ 2005 EE (звідти й наведений текст).
Може хтось пояснити механізм виникнення такої великої похибки?