чет немного запутался в константах... подскажите пожалуйста дефайн или значение максимального целого, который может содержаться в переменной типа float и типа double... нужно делать перевод из 64-битного беззнакового целого в float (4 байта) и double (8 байт), причем если значение 64-битного целого больше, чем float или double могут содержать, то надо взять его по модулю этого максимального значения целого... но не знаю, по какому собственно модулю... заранее спасибо! ЗЫ не хотелось бы храдкодить, поскольку проект пишется под винду и никсы, x86 и x64, так что наиболее желателен дефайн из какого-нить стандартного хедера... ЗЗЫ может он есть во float.h, я смотрел, но чет не понял ничего))
В single float экспонента -- 8 бит, диапазон её изменения, ЕМНИП: -127..128. Значит максимальное значение имеет порядок 2^128. Тебе ведь будет достаточно? Или тебя интересует ещё и точность? Но тогда надо подробнее формулировать задачу. ps. А вообще, почитай: http://en.wikipedia.org/wiki/Floating_point Может потом и float.h станет понятнее
Зато мантисса только 23 бита, поэтому гарантированно могут быть представлены все целые числа только до 2^23, а свыше уже не все, а только "эта же кучка", домноженная на степени двойки (пока позволяет экспонента)
PS: С учетом неявного старшего бита размер мантиссы у float = 24 бита, у double = 53 бита. Однако, по любому не ясно, что в этом "(до)школьном задании" означает "максимально содержать", поскольку, как было сказано выше, fp-форматы могут точно представлять не только весь непрерывный диапазон целых чисел +-(2^M-1), где M-разрядность мантиссы (включая неявный старший бит), но и также (выборочно) все числа до +-2^(E-1), где E - разрядность экспоненты, у которых число значащих бит мантиссы не превышает М (т.е. кол-во бит от младшего единичного до старшего единичного <= M)