Вщбщем не могу понять почему а получает 12.539999961853 а не 15.54? double a=0; float function(); int main() { a=function(); return 0; } float function () { float x=12.54; return x; }
Вы имели ввиду 12.54? Переведём дробную часть в двоичную систему счисления: 0.54 -> 0.1000 1010 0011 1101 0111 0000 1010 ... Число 0.54 не может быть представлено конечной дробью в двоичной системе. Преобразуем полученное число обратно в десятичную систему и получим 0.5399(9). "61853" в конце из-за того, что дробь бесконечная, а регистры сопроцессора - конечные.
Да,простите за опечатку. Интересно если переменной а присвоить тип float.То а стновится 12,54.Тоесть в 4 байтах умещается а в 8 нет?Или это деббагер мне округляет по хитрому?
KingT Дебаррег округляет. Почитай о том, как в двоичной системе с помощью мантиссы и порядка представляются вещественные числа, сразу все станет ясно.