Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
#1

Как получить битики float - C++

02.02.2014, 19:32. Просмотров 693. Ответов 21
Метки нет (Все метки)

Здравствуйте!

Кто-нибудь знает как получить битики у float?

C++
1
2
3
4
5
6
7
8
9
10
11
12
 
vector<bool>code;
int i2 = 0;
float one = 1;
float x = 0.36 ;
for (int i = 0; i < 3; i++){
int res = (x & one)>>i2; // с float не работает
if (res) code.push_back(1);
code.push_back(0);
one << 1;
i2++;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
 
vector<bool>code;
int one = 1;
float x = 0.36 ;
int * ptr = (int*) (&x);
for (int i = 0; i < 3; i++){
int res = (*ptr & one)>>i2; // тоже не получается
if (res) code.push_back(1);
code.push_back(0);
one << 1;
i2++;
}
Уже что только не пробовал!

Как это можно реализовать? Подскажите пожалуйста!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 19:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить битики float (C++):

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} ...

Получить в вектора, float - C++
Здравствуйте. Есть: Vector vecAngle; Как получить float *flAngle с него?

Из числа float получить два int-a: целую и дробную части - C++
Всем привет. Как можно из числа float получить два inta. приведу пример: есть 1,45 и 2,397. из первого нужно получить 1 и 45, из второго 2...

Чем отличаются float преобразования (float)var от float(var) - C++
Здравствуйте! Подскажите, чем отличается (float)var от float(var)

cannot convert `float' to `float*. Почему так происходит? - C++
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

неверное приведение void* к *float а далее к float - C++
Почему когда привожу void* к int* потом к int то все работает, данные не бьются и работают нормально, когда делаю те же операции но с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Бендерродригез
Сгибальщик
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
03.02.2014, 04:59 #16
Цитата Сообщение от Toshkarik Посмотреть сообщение
UB мешает как бы.
Что это?
0
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
03.02.2014, 05:39  [ТС] #17
Цитата Сообщение от Toshkarik Посмотреть сообщение
Своял на коленке:
Что-то я рано радовался! Не работает!!!!

Попробовал два разных числа, выдает один и тот же результат!!!

Цитата Сообщение от metaluga145 Посмотреть сообщение
Klafe, хм... Вы хоть бы почитали о том, что я Вам пишу, а в частности про reinterpret_cast.
вот так должно быть правильно
Такая же история!!! Два числа 0.72 и 0.36! Результат один и тот же!!!

Добавлено через 5 минут
И вообще результат не предсказуемый!!!

При переводе на сайтах из десятичной в двоичную получаются одни результаты, в приведенных выше примерах другие!

Добавлено через 11 секунд
И вообще результат не предсказуемый!!!

При переводе на сайтах из десятичной в двоичную получаются одни результаты, в приведенных выше примерах другие!
0
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
03.02.2014, 06:01  [ТС] #18
Вот есть табличка. В ней нужно числа в столбике Q представить в двоичном виде и взять первые L бит.

Если перевод в двоичную систему делать через онлайн сайты, то все бьется и и сходится.

А по приведенным выше примерам результаты другие.
0
Миниатюры
Как получить битики float  
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
03.02.2014, 07:18  [ТС] #19
Короче, покумекал, покумекал и решил, что проще будет сделать так:

Для перевода необходимо:

Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.72*2 = 1.44 (целая часть 1)
0.44*2 = 0.88 (целая часть 0)
0.88*2 = 1.76 (целая часть 1)
0.76*2 = 1.52 (целая часть 1)
Получаем число в 2-ой системе счисления: 1011
0.72 = 1011


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int _tmain(int argc, _TCHAR* argv[]) {
    vector<bool>code;
    double x = 0.72;
 
    for (int i = 0; i < 4; i++) {
        if (i == 0) {
            x = x * 2;
 
        }
 
        if ((int) x == 0) {
            code.push_back(0);
            x = x * 2;
        }
 
        if ((int) x == 1) {
            x = (x - 1) * 2;
            code.push_back(1);
        }
 
    }
    for (int i = 0; i < 4; i++) {
        cout << code[i];
    }
 
    cin.get();
    cin.get();
    return 0;
}
Получается то, что нужно - 1011

Бинго!
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.02.2014, 09:55 #20
Вы, видать, не имеете представления о том, как хранятся числа с плавающей точкой в памяти.
0
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
03.02.2014, 10:49  [ТС] #21
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вы, видать, не имеете представления о том, как хранятся числа с плавающей точкой в памяти.
Да, как-то не сталкивался!

Надо будет на досуге разобраться.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
03.02.2014, 12:52 #22
Klafe, вот еще один метод. в этот раз он точно работает. я сверился с Википедией.
C++
1
2
    double b = 1.0000000000000002;
cout << (bitset<64>) *((ULONGLONG*)&b) << endl;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 12:52
Привет! Вот еще темы с ответами:

invalid types `float[float]' for array subscript - C++
void SEARCH(float vol, float price, int i) { if (i&gt;N) { if(price&gt;maxprice) { ...

Ошибка cannot convert 'float' to 'float*' - C++
Здравствуйте, что означает error: cannot convert 'float' to 'float*' for argument '1' to 'int mas_time(float*, int)'? Из-за чего она...

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) - C++
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй подпрограме.Извиниет за ошибки.Не владею руским.Помогите...

как победить Double? Float? - C++
C++ - так описать нельзя( ну и как мне ее сделать глобальной и есть ли ограничение на кол-во переменных типа ?????? у меня их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.02.2014, 12:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru