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

Тема в разделе "LANGS.C", создана пользователем KingT, 30 янв 2008.

  1. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    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

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Вы имели ввиду 12.54?

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

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    Да,простите за опечатку.

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

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    KingT

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