Преобразование float в double

Discussion in 'LANGS.C' started by KingT, Jan 30, 2008.

  1. KingT

    KingT Member

    Blog Posts:
    0
    Joined:
    Jan 12, 2006
    Messages:
    208
    Вщбщем не могу понять почему а получает 12.539999961853 а не 15.54?

    double a=0;

    float function();

    int main()
    {
    a=function();
    return 0;
    }

    float function ()
    {
    float x=12.54;
    return x;
    }
     
  2. AssemblerIA64

    AssemblerIA64 New Member

    Blog Posts:
    0
    Joined:
    Oct 7, 2007
    Messages:
    160
    Вы имели ввиду 12.54?

    Переведём дробную часть в двоичную систему счисления:
    0.54 -> 0.1000 1010 0011 1101 0111 0000 1010 ...
    Число 0.54 не может быть представлено конечной дробью в двоичной системе.
    Преобразуем полученное число обратно в десятичную систему и получим 0.5399(9). "61853" в конце из-за того, что дробь бесконечная, а регистры сопроцессора - конечные.
     
  3. KingT

    KingT Member

    Blog Posts:
    0
    Joined:
    Jan 12, 2006
    Messages:
    208
    Да,простите за опечатку.

    Интересно если переменной а присвоить тип float.То а стновится 12,54.Тоесть в 4 байтах умещается а в 8 нет?Или это деббагер мне округляет по хитрому?
     
  4. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    KingT

    Дебаррег округляет. Почитай о том, как в двоичной системе с помощью мантиссы и порядка представляются вещественные числа, сразу все станет ясно.