1

Тема: Переведення float в зручний для FPU вигляд

Хай.
От у нас лаба такая, написати C++сну прогу з використанням inline assembler'a.
Пишу тут, тому що мені потрібно розібратись в алгоритмі переведення отого float'а в двійкове число, аби проводити над ним операції на FPU.
Нам казали, що саме це число має бути розширене до 80 бітиків, але зараз не про це.
От з переведенням цілої частини в двійкову систему числення все зрозуміло

float number = 3.0165f;
    int integer = (int)number;
    vector<int> integerPart;
    for (int i = 0; integer > 0; i++)
    {
        integerPart.insert(integerPart.begin(),integer%2);
        integer /= 2;
    }

Тут ми знаємо, що кількість операції буде кінцева.
А от як бути з переведенням даних після коми?
Там же треба множити число на 2 і перевіряти цілу частину, а скільки разів його тре множити?

2 Востаннє редагувалося koala (23.10.2014 16:20:05)

Re: Переведення float в зручний для FPU вигляд

Доки не отримаєте потрібну точність. Переведення після коми неточне за визначенням - наприклад, десяткове 0,2 в двійковій системі буде 0,(0011) - дужки, нагадую, позначають період.

Подякували: FakiNyan1

3

Re: Переведення float в зручний для FPU вигляд

Чуйте. А поясніть за таку штуку. От число може бути 32-бітне, 64-бітне і 80-бітне. Мені тре 80 бітне.
В 80 бітному числі перший біт означає знак числа, - чи +. Далі йдуть 15 біт експоненти, і далі 64 біти мантиси.
От в 32, та 64-бітних цислах все зрозуміло, а чому в 80-бітному числі, біт під номером 16 == 1 ?
http://puu.sh/cT0Uv/9ef7965a15.png
Він ще виділений, але я там щось не побачив, аби про це щось писали.

4

Re: Переведення float в зручний для FPU вигляд

надибав вже інфу, той бітик просто має бути рівним одиниці, і все тут!
http://puu.sh/cTexh/85b7ab3d1d.png

Подякували: 0xDADA11C71

5

Re: Переведення float в зручний для FPU вигляд

Може бути все, що завгодно; але в нормалізованих - одиниця.
http://en.wikipedia.org/wiki/Extended_precision