Dodawanie po przecinku

2014-12-02 13:19

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

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?

edytowany 1x, ostatnio: Craith, 2014-12-02 14:15

Pozostało 580 znaków

2014-12-02 14:30

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

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?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-12-02 14:33

Pozostało 580 znaków

2014-12-02 14:56

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

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

Pozostało 580 znaków

2014-12-02 15:04

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-02 16:27

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

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?

Pozostało 580 znaków

2014-12-02 16:58

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-02 21:07

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

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.

Pozostało 580 znaków

2014-12-02 21:11

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

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;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-02 21:22

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

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

edytowany 1x, ostatnio: Craith, 2014-12-02 21:29

Pozostało 580 znaków

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