Mantysa binarnie

0

Czesc wpadlem na pomysl napisania programu ktory zapisze liczbe ulamkowa dziesietnie na binarnie. Np z dokladnoscia + - 30 po przecinku. Jak na razie idzie dobrze bo udalo mi sie zrobic to dla tablicy charow ale chcialbym z niej skorzystac i zrobic to po 'ludzku'. Oto kod:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float base2(float liczba)
{
	int i,liczba_dziesietna_=0,licznik=0;
	char tab[31];
	tab[0]='0';
	tab[1]='.';
	for(i=2;i<31;i++)
	{
	    liczba*=2;
	    if(liczba>=1.0)
	    {
	    	tab[i]='1';
	    	liczba--;
	    }
	    else
	    tab[i]='0';
	}
	printf("%s\n",tab);
	
	for(i=2;i<31;i++)
	{
		licznik--; //do potegi -
		if(tab[i]='1')
		liczba_dziesietna_=pow(2.0,licznik);
	}
	
	return liczba_dziesietna_;
}

int main()
{
    float liczba=0.1;
    int calk=(int)liczba;
    float mant=liczba-calk;
    
    float liczba2=base2(liczba);
    printf("%.30f",liczba2);
    return 0;
}

Podejrzewam ze wszystko jest dobrze ale wydaje sie ze mam blad w tej linijce:

liczba_dziesietna_=pow(2.0,licznik);

i cholera nie wiem co jest zle. Moze bo dlatego bo juz jest pozno. Jesli wiecie to zrobilem zle to dajcie znac. dzieki wielkie

0

fłoat ma znacznie mniejszą precyzje niż 30 znaków.
Może wyjaśnisz na przykładzie co dokładnie chcesz zrobić i jakiego wyniku się spodziewasz.

0

Jak skompilujesz i uruchomisz to wyjdzie ci 0.00011001100110011001100110100 i to bedzie tablica charow. I ja chce uzyskac ten sam wynik tylko zeby 0.00011001100110011001100110100 (to samo) zostalo zapisane jako float (double?) w zmiennej liczba_dziesietna.

0

A no to proszę:

float base2(float liczba) { return fmod(liczba,1); }

1 użytkowników online, w tym zalogowanych: 0, gości: 1