Максимальная целая часть float и double

Тема в разделе "LANGS.C", создана пользователем Rel, 4 дек 2010.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    чет немного запутался в константах... подскажите пожалуйста дефайн или значение максимального целого, который может содержаться в переменной типа float и типа double... нужно делать перевод из 64-битного беззнакового целого в float (4 байта) и double (8 байт), причем если значение 64-битного целого больше, чем float или double могут содержать, то надо взять его по модулю этого максимального значения целого... но не знаю, по какому собственно модулю... заранее спасибо!

    ЗЫ не хотелось бы храдкодить, поскольку проект пишется под винду и никсы, x86 и x64, так что наиболее желателен дефайн из какого-нить стандартного хедера...
    ЗЗЫ может он есть во float.h, я смотрел, но чет не понял ничего))
     
  2. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    В single float экспонента -- 8 бит, диапазон её изменения, ЕМНИП: -127..128. Значит максимальное значение имеет порядок 2^128. Тебе ведь будет достаточно?
    Или тебя интересует ещё и точность? Но тогда надо подробнее формулировать задачу.

    ps. А вообще, почитай: http://en.wikipedia.org/wiki/Floating_point
    Может потом и float.h станет понятнее ;)
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Зато мантисса только 23 бита, поэтому гарантированно могут быть представлены все целые числа только до 2^23, а свыше уже не все, а только "эта же кучка", домноженная на степени двойки (пока позволяет экспонента)
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    PS: С учетом неявного старшего бита размер мантиссы у float = 24 бита, у double = 53 бита.

    Однако, по любому не ясно, что в этом "(до)школьном задании" означает "максимально содержать", поскольку, как было сказано выше, fp-форматы могут точно представлять не только весь непрерывный диапазон целых чисел +-(2^M-1), где M-разрядность мантиссы (включая неявный старший бит), но и также (выборочно) все числа до +-2^(E-1), где E - разрядность экспоненты, у которых число значащих бит мантиссы не превышает М (т.е. кол-во бит от младшего единичного до старшего единичного <= M)
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    спасибо, разобрался... вопрос был о непрерывном диапазоне целых чисел...
     
  6. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Множество целых чисел не обладает свойством непрерывности. ;)