Horyzont.iiar.pwr.wroc.pl

Politechnia Wrocławska

  • Zwiększ rozmiar czcionki
  • Domyślny  rozmiar czcionki
  • Zmniejsz rozmiar czcionki
Home
Forums
History:

Poradnia

Piszcie tutaj jak natrafiliście na jakieś problemy podczas implementacji algorytmu albo w cpp coś nie chce działać.
Public write access is disabled. Please login or register
Last post
jakub.kujawski

jakub.kujawski
2 posts
---
Location:
n.a.
04.12.2010 22:24

Odzyskanie mantysy w formacie int

Tak więc chłopaki mam taki problem :D
mamy liczbę, która ja wiadomo możemy zapisać w postaci cecha + mantysa
oto przyklad:

3.15 = cecha(3) + mantysa (0.15)

i tu zaczyna się dla mnie problem, gdyż potrzebuje mantysę w formie liczby całkowitej (w naszym przypadku 15).

Testowałem już 2 metody

1. mnożenie razy 10 dopóki po przecinku nie znajduje się żadna liczba
(niestety ten sposób nie daje zamierzonych efektów przez niedokładności)

2. konwertowanie do stringa obcinanie '0.' na początek, usuniecie wszystkich zer od końca i próba wczytania inta z tego ale nie do końca mi to działa.

Tak wiem wiem pomyślicie sobie - nieuk, ot co przecież mógł uzyć strumieni :D

A tu was zaskoczę - język w którym mam to wykonać to "C" moi drodzy tu niestety strumieni nie ma:D

CHYBA że zna ktoś metode konwertowania liczb typu 0.455020... w systemie dziesiętnym(10) do binarki(2)

Pozdrawiam :))

Edited by jakub.kujawski - 04.12.2010 22:25

Edited by jakub.kujawski - 04.12.2010 22:53




_wiktorr

_wiktorr
12 posts
---
Location:
n.a.
05.12.2010 04:04
Re: Odzyskanie mantysy w formacie int
Chyba warto tu dopracować docinanie tego stringa. Z zaokrągleniem nie powinno wtedy być problemu. Ale zainteresował mnie pomysł z czytaniem mantysy z floata w (2). U mnie czytanie zapisu floata działa w ten sposób:

float myFloat = 255.14;
int *myInt = (int *) &myFloat;

for(int i=0; i<32; i++)
{
if(i==1 || i==9)cout <<" ";
if(myFloat>=0)cout << 0; else cout << 1;
*myInt<<=1;
}

czyli przesuwanie bitów float'a i pośrednie czytanie 1. bitu przez sprawdzanie znaku tak przesuniętej liczby. Pamiętaj jednak, że zapis float'a w pamięci jest trochę zawiły (może jak bym się uczył z AK to był by trochę mniej) i nie bardzo widzę jak byś z tego chciał wyciągnąć szukanego inta. Ale powodzenia sam jak coś wymyślę to też podrzucę. I tak cięcie stringa będzie po porostu prostsze.

Edited by _wiktorr - 05.12.2010 04:15




lukasz_p

lukasz_p
14 posts
---
Location:
Poland
05.12.2010 10:12
Re: Odzyskanie mantysy w formacie int
To ja napisze o tej drugiej wersji czyli tak jak bysmy na kartke rozwiazywali. Przy liczbach calkowitych podnosimy do dodatnich poteg, przy ulamkach podnosimy do ujemnych np.: 2^-1=0.5, 2^-2=0.25 itd. Rejestrujemy tylko to co nam da w sumowaniu nasza upragniona liczbe. I pojawia sie problem z ulamkami. Dokladnosc :]

#include
#define FORD(x,b,e) for(int x=b;x>=(e);--x)
#define REP(x, n) for(int x=0; x>ulamek;
const double EPS=10e-9;//sterujemy dokladnoscia
FORD(n,-1,-128){
potega=pow(2,n); ni=(abs(n)-1);
if(potega>ulamek){
bin[ni]='0';
}
else if(potega==ulamek){
bin[ni]='1';
break;
}
else{
bin[ni]='1';
ulamek-=potega;
}
if(ulamek-EPS < 0 ) break;
}
REP(ii,ni+1) cout < < bin[ii];
}

Moze za duzo if'ow gdzies nawtykalem. Witkora kod jest krotszy ale nie wiem czy uwzglednia kwestie matematyczne.
Jezeli cos jest w kodzie niezrozumiale albo w metodologii to pytaj smialo.

Edited by lukasz_p - 05.12.2010 10:23


caly czas do przodu, staramy sie :)

lukasz_p

lukasz_p
14 posts
---
Location:
Poland
13.12.2010 04:33
Re: Odzyskanie mantysy w formacie int
I jak Kuba, udalo sie zaliczyc? Na 5 czy na 5.5?

caly czas do przodu, staramy sie :)

Discussions v1.1
(c) 2010 Codingfish
logohoryzont.png

Ostatnio w dyskusji

Odpowiedzi Tematy
0
14.12.2010 16:35  Projekty

3
13.12.2010 18:43  Na podwórku

Historia:   4h   8h   12h   24h

Skrót aktualności

Facebook Hacker Cup

Dla tych wszystkich Was, którym już brakuje okazji by zmierzyć się z innymi na polu programowania proponujemy nowe wydarzenie. Tym razem to duża firma spod małego 'f' proponuje międzynarodowe zawody algorytmiczne z atrakcyjnymi nagrodami i finałem w Palo Alto!

Więcej …
 
BIT'10 rusza
"Nadchodzi czas na kolejną edycję jedynego, 24-godzinnego festivalu informatycznego na Politechnice Wrocławskiej. Znamy już konkretną datę: 10-11 grudnia. Tym razem postaraliśmy się o nową lokalizację: Stołówka akademicka PWr (nad "Dziekanatem"). Więcej przestrzeni-> więcej swobody-> więcej pomysłów.
 

 
Więcej …
 

Galeria