mam do napisania funkcje w c++ która bedzie przeliczac liczbe (podana jako łancuch znaków) w jakims systemie liczbowym na inny system. Liczby sa rzeczywiste.
Jeśli liczby są rzeczywiste to część całkowitą obliczasz według tego w linku natomiast część ułamkową musisz przeliczyć w następujący sposób
mamy liczbe 0,625
mnożymy x2 wychodzi 1,25
usuwamy część całkowitą i zapisujemy sobie ją gdzieś do tablicy
1
0,25 znowu mnożymymy i wychodzi 0,5
usuwamy część całkowitą a że jej nie ma to zapisujemy do tablicy 0
0
mamy teraz 0,5 mnożymy x2 i mamy 1,0
usuwamy część całkowitą i zapisujemy
1
zostaje nam 0 więc juz nic nie robimy pętla skończona
0,625 (10) = 0,101 (2)
pętle wykonujemy dopóki nie otrzymamy 0 po usunięciu cześci całkowitej lub jeśli uzyskamy odpowiednią ilość liczb po przecinku
Marcin511 , to rozwiązanie nie działa. Czy 101 binarnie to 625 w dziesiętnym? Nie. Nie widzę sensu tego algorytmu. IMHO należy wyciągnąć część ułamkową i dopiero ją zamienić.
Nie, 101 w binarnym to nie 625 w dziesiętnym tylko 0.101 w dwójkowym to 0.625 w dziesiętnym
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/011.php
i fragment z tej strony
Sposób pierwszy
Obliczamy wartość części całkowitej sumując wagi pozycji zawierających cyfrę 1:
110101(2) = 32 + 16 + 4 + 1 = 53(10)
Identycznie obliczamy wartość części ułamkowej:
0,111011(2) = 1/2 + 1/4 + 1/8 + 1/32 + 1/64
0,111011(2) = 32/64 + 16/64 + 8/64 + 2/64 + 1/64
0,111011(2) = 59/64
Łączymy obie części w całość otrzymując wynik:
110101,111011(2) = 53 59/64
więc wynika z tego że moja liczba 0.101 to 1/2 + 1/8 (przy 1/4 jest 0) więc 1/2 + 1/8 = 0.5 + 0.125 = 0.625
Z resztą w szkole też mnie tak uczyli jak tutaj piszę.