Перейти к содержанию
    

Представление вещественных типов в машинном коде

Тип FLOAT в языке си имеет размерность 64 бита, если возвести 2 в 63 степень, то не получится максимально допустимое число, которое может использоваться. Как тогда представляются числа, может кто знает? Или знает ссылку на литературу где это можно посмотреть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость mihask
Тип FLOAT в языке си имеет размерность 64 бита, если возвести 2 в 63 степень, то не получится максимально допустимое число, которое может использоваться. Как тогда представляются числа, может кто знает? Или знает ссылку на литературу где это можно посмотреть?

 

Есть такая книжка - "Алгоритмические трюки для программистов" - в сети можно скачать точно.

Вот например - http://rapidshare.de/files/21992071/Hwa-alg.rar.html правда неуверен, что ссылка рабочая.

Откуда сам качал не помню :)

Там все про формат расписано.

Кстати float - 32 бита занимает :), а

вот double - 64 бита как раз.

Изменено пользователем mihask

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

где это можно посмотреть?

 

http://www.psc.edu/general/software/packages/ieee/ieee.html

 

The IEEE double precision floating point standard representation requires a 64 bit word, which may be represented as numbered from 0 to 63, left to right. The first bit is the sign bit, S, the next eleven bits are the exponent bits, 'E', and the final 52 bits are the fraction 'F':

  S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0 1        11 12                                                63

 

по-русски биты Е - "порядок", биты F - "мантисса"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тип FLOAT в языке си имеет размерность 64 бита, если возвести 2 в 63 степень, то не получится максимально допустимое число, которое может использоваться. Как тогда представляются числа, может кто знает? Или знает ссылку на литературу где это можно посмотреть?

"Стандарт IEEE754/854"

Самый старший бит - знак числа ( 1 - отрицательное ), далее следуют 8 бит экспоненты, при этом

экспонента смещена на 127, т.е. показателю степени 0 соответствует 127, положительным показателям степени соответствуют числа от 127 до 254, отрицательным - от 1 до 126.

Далее следует мантисса с так называемым "скрытым" битом. Для указанного стандарта считается,

что мантисса всегда больше или равна 1 и меньше двух. Вот эта самая единица и нигде не представлена, а только подразумевается. Есть еще несколько "специальных" случаев, например - "бесконечность", ноль и "не число".

Есть и экзотические представления, например, когда под экспоненту отводится больше бит или мантисса загоняется в диапазон 0 - 1, но для наиболее употребительным форматом является все-же вышеописанный.

 

Правда, все вышесказанное относится скорее к 32-битному представлению, но 64-битное похоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще вопрос возник.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость mihask
Еще вопрос возник.

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

 

Если необходимо самому реализовать, алгоритм преобразования, то прочитав подробное описание

формата float и double - это несложно сделать самому. А в сях перевод из одной системы в другую достигается

преобразованием типов, например:

 

float fl=75.803;

unsigned long lo;

 

lo=(unsigned long)(fl*1000);

 

получаем в переменной lo число 75803

 

lo == 75803

 

fl умножаем на тысячу что бы разряды не после запятой не потерять.

Изменено пользователем mihask

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про типы почитал, и вроде бы разобрался.

Операции сложения понятно как производятся. А вот с операциями деления и умножения не совсем. Пытался делить мантисыдруг на друга ответ не выходит, как получить дробную часть не пойму.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость mihask
Про типы почитал, и вроде бы разобрался.

Операции сложения понятно как производятся. А вот с операциями деления и умножения не совсем. Пытался делить мантисыдруг на друга ответ не выходит, как получить дробную часть не пойму.

 

А почему не хотите воспользоваться сишными функциями ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему не хотите воспользоваться сишными функциями ?

 

я не уточнол свою задачу.

Я пишу не на си, и мне нужно реализовать сложеиние, умножение, деление.

А "СИ", я написал просто так, для того чтоб привести пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость mihask

А почему не хотите воспользоваться сишными функциями ?

 

я не уточнол свою задачу.

Я пишу не на си, и мне нужно реализовать сложеиние, умножение, деление.

А "СИ", я написал просто так, для того чтоб привести пример.

 

Посмотрите- помоему это то что вам нужно:

http://www.intuit.ru/department/hardware/archsys/9/3.html

 

то же прилепил в файле

___________________________________.doc

Изменено пользователем mihask

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите- помоему это то что вам нужно:

http://www.intuit.ru/department/hardware/archsys/9/3.html

 

Спасибо, какраз то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...