Dodawanie po przecinku

0

Czesc, mam problem z potegowaniem liczby 10. Dodam ze ta dluga tablica to 0,1 zapisana binarnie. kod:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
	int licznik = 0,i;
	double liczba_dziesietna_=0.0,jakas=0.0;
    char tab[]="0.00011001100110011001100110011";
    printf("%s\n\n",tab);
	for(i=2;tab[i];i++)
	{
		licznik--;
		if(tab[i]='1')
		{
			jakas=pow(10.0,licznik);
			liczba_dziesietna_=liczba_dziesietna_+jakas;
			printf("%.20lf\t%jakas zmienna %.20lf\n",liczba_dziesietna_,jakas);
		}
		
	}
	printf("%.30lf liczba dziesietna",liczba_dziesietna_);
    return 0;
} 

Po pierwsze

if(tab[i]='1') 

wg mnie powinno byc interpretowane tak: jesli w tablicy tab na miejscu

i
znajduje sie "1" to wykonaj dalej. A to dziala zawsze. Gdzie popelnilem blad?
Po drugie 10 ^-1 to raczej 0,1 a nie
0.10000000000000001000
. Dodam ze korzystam z dev cpp 5.7.1 oraz TDM GCC 4.8.1 64 bit
jakies pomysly?

0

Ad 1. if(tab[i]='1') jest interpretowane następująco:

  1. wpisz znak '1' w tab[i]
  2. Bezwzględnie wykonaj to co jest w tym if

Ad 2. Dokładność liczb zmiennoprzecinkowych się kłania. Nie da się zapisać w ograniczonej reprezentacji binarnej liczbę 1/10 tak samo jak nie da się zapisać 1/3 w systemie dziesiętnym.

Oprócz tego, co ma wspólnego pow(10.0,licznik); z binarnym zapisem liczby?

0

Racja.... dzieki ale pomylka. No poczatkujacym sie zdarzaja takie wpadki.
Ad 2. No jak to co? Pow to potega. Jesli podniesiesz 10 do jakiejs ujemnej potegi wyjdzie 0,0...1 wiec po dodaniu do liczby 0,0 przyjmie formę: 0,0...1 i wtedy mozna uznac ze jest to forma binarna pewnej liczby tylko ze mozna ja wypisac wykorzystujac %lf. Takie moje udziwnienie

0

Jeszcze raz powtarzam pytanie, czytaj sylabami:
Co ma wspólnego pow(10.0,licznik); z binarnym zapisem liczby?

0

Zrob tak: wez karte i dlugopis. Napisz 10 i podnies to do -4 potegi. Nastepnie wykonaj 10 do -5. Zsumuj.(...) Wyjdzie: 0,0(0011)(...) (10). Porownaj wizualnie liczbe 0,0(0011) w dziesietnym do 0,0(0011) dwojkowo. Identyczne prawda?

0

Człowieku czy wiesz co to jest system binarny?
0.1 w systemie binarnym to 0.5 w systemie dziesiętnym.

0

To wez jeszcze raz przeczytaj moj post uwaznie :D Specjalnie napisalem:

Porownaj **wizualnie liczbe [*] w dziesietnym do [] dwojkowo.
To ze np. 0.1 w systemie binarnym to 0.5 w systemie dziesiętnym to oczywiscie wiem nie od dzis. I pewnie dlatego nie potrafiles zrozumiec o co mi chodzi. Ale sobie poradzilem. Dzieki
mam nadzieje ze teraz rozumiesz.

0

No rzesz!

#include <stdio.h>
 
int main()
  {
   char tab[]="0.00011001100110011001100110011";
   double liczba_dziesietna;
   sscanf(tab,"%lf",&liczba_dziesietna);
   printf("%.30lf\n",liczba_dziesietna);
   return 0;
  }
0

A no to ze sie da latwiej zrobic to tak podejrzewalem. Sam wiesz ze poczatkujacy utrudniaja sobie zadania niepotrzebnie. Dzieki
/edit nie masz po co sie zloscic. nawet nie znalem sscanf wiec probowalem sobie inaczej poradzic. trzeba sobie radzic

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