ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

float<->int
  #1  
Старый 23.09.2007, 20:19
Аватар для scrat
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию float<->int

Нужно написать прогу на c++ которая переводила бы из float'а в int и наоборот.Дело в том что писать надо не так:
Код:
float a=5.8;
int b=(int)a;
А работать надо с побитовыми операциями,мантисами и прочей чушнёй.Подскажите алгоритм/идею как это сделать хотяюы
 
Ответить с цитированием

  #2  
Старый 23.09.2007, 20:45
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

b=static_cast<int>(a)
почему так как ты написал не подходит?

вообще общая формула приведения типов: x=static_cast<тип>(y)

Последний раз редактировалось Vertexe; 23.09.2007 в 20:53..
 
Ответить с цитированием

  #3  
Старый 23.09.2007, 20:56
Аватар для scrat
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

Цитата:
Сообщение от Vertexe  
b=static_cast<int>(a)
почему так как ты написал не подходит?

вообще общая формула приведения типов: x=static_cast<тип>(y)
надо работать с битами!
 
Ответить с цитированием

  #4  
Старый 23.09.2007, 21:06
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

тобишь если у тебя есть к примеру число:
1|1379280000|0|02 --> -0.137928e2
то тебе его надо перевести в:
1|000000000013 ???
 
Ответить с цитированием

  #5  
Старый 23.09.2007, 21:08
Аватар для scrat
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

Цитата:
Сообщение от Vertexe  
тобишь если у тебя есть к примеру число:
1|1379280000|0|02 --> -0.137928e2
то тебе его надо перевести в:
1|000000000013 ???
чёто ты левое сказал: float это знак,порядок+32,мантиса.мне нужно из флоата инт получи ть
 
Ответить с цитированием

  #6  
Старый 23.09.2007, 21:27
Аватар для DWORD
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Недавно как раз такую писал. Т.к. флоат занимает 32 бита, аргумент x в действительности является флоатом, просто по условию поставленной передо мной задачи этот тип использовать было вообще нельзя..
Код:
__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;


}
 
Ответить с цитированием

  #7  
Старый 23.09.2007, 21:45
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Код:
static inline int double2int(double d)
{
  const double t = d + 6755399441055744.0;
  return *((int *)(&t));
}
работает пиздец быстро, быстрее статиккастов и приведений типа (blahblah)
 
Ответить с цитированием

  #8  
Старый 23.09.2007, 21:46
Аватар для _Great_
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

scrat: Ай-ай-ай я же сегодня подробно расписал как устроен float!

Цитата:
Сообщение от Vertexe  
тобишь если у тебя есть к примеру число:
1|1379280000|0|02 --> -0.137928e2
то тебе его надо перевести в:
1|000000000013 ???
Простите, с какого перепугу у Вас float из 4х частей состоит? 1|1379280000|0|02
 
Ответить с цитированием

  #9  
Старый 23.09.2007, 22:10
Аватар для VERte][
VERte][
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме:
3013539

Репутация: 441
По умолчанию

вещественное число
первая часть - знак числа, вторая - число, третья - знак степени, четвёртая - степень

сори с double перепутал =\

Последний раз редактировалось Vertexe; 23.09.2007 в 22:12..
 
Ответить с цитированием

  #10  
Старый 23.09.2007, 22:19
Аватар для _Great_
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

float и double состоят из трех частей. http://en.wikipedia.org/wiki/IEEE_754
ты разделяешь одну из частей на две.. с тем же успехом можно экспоненту разделить на 8 частей и назвать их степенями двойки в экспоненте
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ