float<->int

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by scrat, 23 Sep 2007.

  1. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    Нужно написать прогу на c++ которая переводила бы из float'а в int и наоборот.Дело в том что писать надо не так:
    Code:
    float a=5.8;
    int b=(int)a;
    
    А работать надо с побитовыми операциями,мантисами и прочей чушнёй.Подскажите алгоритм/идею как это сделать хотяюы
     
    1 person likes this.
  2. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    b=static_cast<int>(a)
    почему так как ты написал не подходит?

    вообще общая формула приведения типов: x=static_cast<тип>(y)
     
    #2 VERte][, 23 Sep 2007
    Last edited: 23 Sep 2007
  3. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    надо работать с битами!
     
  4. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    тобишь если у тебя есть к примеру число:
    1|1379280000|0|02 --> -0.137928e2
    то тебе его надо перевести в:
    1|000000000013 ???
     
  5. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    чёто ты левое сказал: float это знак,порядок+32,мантиса.мне нужно из флоата инт получи ть
     
  6. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Недавно как раз такую писал. Т.к. флоат занимает 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;
    
    
    }
     
    1 person likes this.
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Code:
    static inline int double2int(double d)
    {
      const double t = d + 6755399441055744.0;
      return *((int *)(&t));
    }
    работает пиздец быстро, быстрее статиккастов и приведений типа (blahblah)
     
  8. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    scrat: Ай-ай-ай я же сегодня подробно расписал как устроен float!

    Простите, с какого перепугу у Вас float из 4х частей состоит? 1|1379280000|0|02
     
  9. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    вещественное число
    первая часть - знак числа, вторая - число, третья - знак степени, четвёртая - степень

    сори с double перепутал =\
     
    #9 VERte][, 23 Sep 2007
    Last edited: 23 Sep 2007
  10. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    float и double состоят из трех частей. http://en.wikipedia.org/wiki/IEEE_754
    ты разделяешь одну из частей на две.. с тем же успехом можно экспоненту разделить на 8 частей и назвать их степенями двойки в экспоненте
     
  11. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    отсюда следует, что в инсте говорят не в соответствии со стандартами =\
     
    #11 VERte][, 23 Sep 2007
    Last edited: 23 Sep 2007
  12. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    я очень не понимаю людей которые учатся в заведениях типа мфюа на программистов и жалуются на уровень преподавания.
     
    1 person likes this.
  13. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    я учусь в МГУ ВМиК =\
    поэтому очень обидно
     
    1 person likes this.
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    это как? знак, мантиса, степень. Вам еще что-то добавили? )
     
  15. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    нам добавили знак степени
     
  16. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    то что тебе говорят это правильно

    просто та часть, что выделяется как отдельная и является знаковым битом это не так принципиально суть одна и та же

    а по вопросу мона получить адрес и прочитать порядок и потом нужное количество разрядов мантисы
     
    _________________________
  17. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Ой да зачем чтото вообще разделять, все числа будем считать набором бит. Все данные набором байт. Структуры, юнионы, битовые поля явно не для нас.

    Нужное это какое? Порядок задается как показатель у степени двойки, придется сначала флоат полюбому преобразовыать в вид с фиксированной запятой, потом отбрасывать дробную часть
     
  18. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Знак у степени действительно есть, но отдельно не выделяется (нафига?!) и вообще порядок другой у полей.
     
  19. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    чуваки а меня в 9-ом(!) классе с этим трахают
     
  20. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    тебя в 9м теоремой Лапласа с доказательством для определителя матрицы трахают?) Или Машиной Тьюринга с Нормальными Алгоритмами Маркова???

    вот это трахают, а хня про запись чисел в памяти у нас была ток пол-лекции для повторения причём всё это достаточно не муторно...