Можно создать дубликат:
C++ double precision and rounding offGCC C/C++ двойное поведение
Код:
int main(void)
{
double a = 12;
double b = 0.5;
double c = 0.1;
std::cout.precision(25);
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
std::cout << a + b << std::endl;
std::cout << a + c << std::endl;
return 0;
}
Выход:
12
0.5
0.1000000000000000055511151
12.5
12.09999999999999964472863
Почему GCC представляет 0,1 и 0,5 по-разному? При добавлении они представлены по-разному. Кажется, что 0.5 и целые числа представлены иначе, чем другие поплавки. Или это что-то происходит в библиотеке io? В чем причина такого поведения?
[related] (http://stackoverflow.com/questions/5098558/float-vs-double-precision). – iammilind
У двух пар не бесконечная точность. Значения, которые вы назначаете, не могут быть точно представлены с использованием удвоений. – MatthewD
Я уточнил свой вопрос.Речь идет не о точности. –