2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Представление вещественного числа в памяти
Сообщение08.01.2012, 16:16 


10/01/11
4
Доброго времени суток.

Пытаюсь разобраться с представлением числа с плавающей точкой в нормализованной форме с одинарной точностью на примере числа -1.7

Действую так:
  • перевожу в двоичную систему счисления и в нормализованный вид: --1,7_{10} = -1,10(1100)_{2} = -1,10(1100)_{2} \cdot 2^0
  • вычисляю избыток в смещенном коде: $2^7 - 1 = 127$
  • представляю порядок в смещенном коде с избытком 127 используя 8 разрядов: $0_{10} = (0 + 127)_{\text{10 (изб. 127)}} = 01111111_{2}$
  • заполняю разрядную сетку, состоящую из 32 разрядов: 1 01111111 10110011001100110011001

Попробовал посмотреть что в реальности творится в памяти, написав следующую программу:
Код:
#include <stdio.h>
#define LITTLE_ENDIAN
typedef unsigned char u8;

void print_byte(u8 num)
{
    u8 i, x;
    for (i = 0; i < 8; ++i) {
        x = num;
        x <<= i;
        x >>= 7;
        printf("%d", (int)x);
    }
}

void print_memory(void *v, size_t size)
{
    size_t i;
#ifdef LITTLE_ENDIAN
    for (i = size-1; i != -1; --i)
#else
    for (i = 0; i < size; ++i)
#endif
    {
        print_byte(((u8 *)v)[i]);
        printf(" ");
    }
    printf("\n");
}

int main()
{
    float a = -1.7;
    print_memory(&a, sizeof(a));
    return 0;
}
Вывод выглядит так: 10111111 11011001 10011001 10011010

Собственно не могу понять почему последние 2 бита имеют такие значения.

Заранее благодарен помощи.

-- Вс янв 08, 2012 16:39:03 --

Кажется разобрался сам. Дробь бесконечная, а за пределами разрядной сетки есть единица, поэтому последний разряд округляется в большую сторону — происходит сложение с еще одной единицей.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group