перевод из битовой карты во float ;-( Привет всем! Нужна помощь ? пишу диплом. Нужно написать код, который бы переводил битовые карты во float число по всем правилам его формирования. 1 01111110 11000000000000000000000 = -0,875 зн характеристика мантисса вопрос как это сделать. Мучаюсь уже вторую неделю? наверное уже вошел в клинч.. или получается ерунда на выходе или еще что?также не могу проверить правильно ли у меня получается? Перелопатил кучу литературы? блин, спасайте! Битовые карты строю ? перевести их в float число не могу ;-(
Re: перевод из битовой карты во float ;-( это тоже лопатил? http://www.google.kz/search?q=алгоритм+перевода+из+двоичной+в+десятичную http://dynamic.nm.ru/articles/ssconvert.htm
Re: перевод из битовой карты во float ;-( народ, вы не поняли, из десятичной в двоичную это не проблема. У меня вопрос другого плана - мне нужно перевести из двоичной карты float в обычое число вещественное. Умножить мантиссу на 2 в степени характеристики плюс с мещение. Вот здесь и начинаются сложности... может есть гений который сможет код кинуть? void IntToBin(int i, int N, char *str) { int k; double dec,v; strcpy(str,""); dec=i; v=pow(2,N-1); for(k=1;k<=N;k++) {if(dec>=v) {strcat(str,"1"); dec-=v; } else strcat(str,"0"); v=v/2; } } int d=pow(2,m); i=1; for(i=N/2;i<N;i++) {for(j=0;j<M;j++) {dig=i*(pow(2,(j-d))); IntToBin(i,n,str1); IntToBin(j,m,str2); strcpy(str,str1); strcat(str," "); strcat(str,str2); strcat(str," "); strcat(str,FloatToStr(dig).c_str()); fprintf(fp," %s \n",str); //Memo1->Lines->Add(dig); } // Memo1->Lines->Add("\n"); } числа получаются, но они совсем странные, на float не похожие ;-) и потом если смещение неправильно посчитать ерудна получается, а я не увререн что считаю его правильно... и проверить как непонятно ;-(
Re: перевод из битовой карты во float ;-( ойвэй http://www.google.kz/search?q=формат+хранения+вещественных+чисел http://sizov.boom.ru/float.htm http://www.lib.csu.ru/DL/bases/prg/frolov/books/bsp/v02/ch12.htm http://khpi-iip.mipk.kharkiv.edu/library/datastr/book/prt02.html
Re: перевод из битовой карты во float ;-( Проверить элементарно - берешь указатель на переменную, в которой лежит полученное число, преобразовываешь его (указатель) в DWORD* , достаешь оттуда значение как DWORD, выводишь как битовую маску и сравниваешь с исходной.
Re: перевод из битовой карты во float ;-( если не повезло, значит вещественные числа по разному нормализованы при равных значениях.
Re: перевод из битовой карты во float ;-( спасибо всем за участие, уже сделал. Кстати 23 бита комбинаций при размере матиссы 4 бита умещяются в файле размером 2мб ;-) проверять чесно говоря не хочется ;-) 0000 0000 0,001953125 0000 0001 0,0020751953125 0000 0010 0,002197265625 0000 0011 0,0023193359375 0000 0100 0,00244140625 0000 0101 0,0025634765625 0000 0110 0,002685546875 0000 0111 0,0028076171875 0000 1000 0,0029296875 0000 1001 0,0030517578125 0000 1010 0,003173828125 0000 1011 0,0032958984375 0000 1100 0,00341796875 0000 1101 0,0035400390625 0000 1110 0,003662109375 0000 1111 0,0037841796875 0001 0000 0,00390625 0001 0001 0,004150390625 0001 0010 0,00439453125 0001 0011 0,004638671875 0001 0100 0,0048828125 0001 0101 0,005126953125 0001 0110 0,00537109375 0001 0111 0,005615234375 0001 1000 0,005859375 0001 1001 0,006103515625 0001 1010 0,00634765625 0001 1011 0,006591796875 0001 1100 0,0068359375 0001 1101 0,007080078125 0001 1110 0,00732421875 0001 1111 0,007568359375 0010 0000 0,0078125 0010 0001 0,00830078125 0010 0010 0,0087890625 0010 0011 0,00927734375 0010 0100 0,009765625 0010 0101 0,01025390625 0010 0110 0,0107421875 0010 0111 0,01123046875 0010 1000 0,01171875 0010 1001 0,01220703125 0010 1010 0,0126953125 0010 1011 0,01318359375 0010 1100 0,013671875 0010 1101 0,01416015625 0010 1110 0,0146484375 0010 1111 0,01513671875 хотя словно хуйня получилась
Re: перевод из битовой карты во float ;-( забыл сказать, знака нету (все положительные) запись мантиссы со скрытым битом