Нужно написать прогу на c++ которая переводила бы из float'а в int и наоборот.Дело в том что писать надо не так: Code: float a=5.8; int b=(int)a; А работать надо с побитовыми операциями,мантисами и прочей чушнёй.Подскажите алгоритм/идею как это сделать хотяюы
b=static_cast<int>(a) почему так как ты написал не подходит? вообще общая формула приведения типов: x=static_cast<тип>(y)
тобишь если у тебя есть к примеру число: 1|1379280000|0|02 --> -0.137928e2 то тебе его надо перевести в: 1|000000000013 ???
Недавно как раз такую писал. Т.к. флоат занимает 32 бита, аргумент x в действительности является флоатом, просто по условию поставленной передо мной задачи этот тип использовать было вообще нельзя.. Code: __int32 IntFormFloat(DWORD x) { CHAR poryadok = ((x >> 23) & 0xFF) - 127; if (poryadok < 0) return 0; // Выталкиваем мантиссу и пририсовываем сэкономленную // нормализацией единицу __int32 mantissa = (x & 0x7FFFFF) | 0x800000; mantissa >>= (23 - poryadok); if (x >> 31) mantissa *= -1; return mantissa; }
Code: static inline int double2int(double d) { const double t = d + 6755399441055744.0; return *((int *)(&t)); } работает пиздец быстро, быстрее статиккастов и приведений типа (blahblah)
scrat: Ай-ай-ай я же сегодня подробно расписал как устроен float! Простите, с какого перепугу у Вас float из 4х частей состоит? 1|1379280000|0|02
вещественное число первая часть - знак числа, вторая - число, третья - знак степени, четвёртая - степень сори с double перепутал =\
float и double состоят из трех частей. http://en.wikipedia.org/wiki/IEEE_754 ты разделяешь одну из частей на две.. с тем же успехом можно экспоненту разделить на 8 частей и назвать их степенями двойки в экспоненте
я очень не понимаю людей которые учатся в заведениях типа мфюа на программистов и жалуются на уровень преподавания.
то что тебе говорят это правильно просто та часть, что выделяется как отдельная и является знаковым битом это не так принципиально суть одна и та же а по вопросу мона получить адрес и прочитать порядок и потом нужное количество разрядов мантисы
Ой да зачем чтото вообще разделять, все числа будем считать набором бит. Все данные набором байт. Структуры, юнионы, битовые поля явно не для нас. Нужное это какое? Порядок задается как показатель у степени двойки, придется сначала флоат полюбому преобразовыать в вид с фиксированной запятой, потом отбрасывать дробную часть
Знак у степени действительно есть, но отдельно не выделяется (нафига?!) и вообще порядок другой у полей.
тебя в 9м теоремой Лапласа с доказательством для определителя матрицы трахают?) Или Машиной Тьюринга с Нормальными Алгоритмами Маркова??? вот это трахают, а хня про запись чисел в памяти у нас была ток пол-лекции для повторения причём всё это достаточно не муторно...