1 / 15
Jun 2018

Mam problem z zadaniem PP0504D - Reprezentacja liczb typu float.

Mój program:

wczytuje liczbę zmiennoprzecinkową (typu float)
zamienia ją na string
zapisuje oddzielnie część całkowitą i dziesiętną
zamienia odpowiednio liczby na zapis binarny
oblicza znak,cechę oraz mantysę zapisując je w postaci binarnej
zamienia zapis liczby w systemie IEE754 na zapis w postaci heksadecymalnej
wypisuje postać heksadecymalną

Wszystkie testy jakie są w zadaniu czy w komentarzach, mój program przechodzi bezbłędnie. Był jeden problem który polegał na błędnym zapisaniu liczby (input -123123.2323, string bez zmian), ale problem ten został rozwiązany (poprzednio liczba wczytywana była jako string, teraz jest jako float, a następnie zapisywana jako string). Mógłby ktoś dać mi testy na których mój program może się wykładać? Wszelkie uzyskane wyniki pokrywają się z tymi uzyskanymi przez https://www.h-schmidt.net/FloatConverter/IEEE754.html28

  • created

    Jun '18
  • last reply

    Dec '23
  • 14

    replies

  • 1.3k

    views

  • 9

    users

  • 2

    likes

  • 3

    links

Zrobiłem to zadanie kompletnie inaczej, ale może masz problem z zerami wiodącymi?

In:

2
5.5
8.8

Out:

40 b0 0 0 
41 c cc cd

Przy 8.8 otrzymałem 41 0 0 0, sprawdzę co się tam dzieje nie tak. Dzięki!

W końcu mam AC : )

Jeszcze jeden błąd który został rozwiązany i na który bym nie wpadł. Podczas reprezentacji liczby w postaci heksadecymalnej, w przypadku liczby 5.5

41 0c cc cd

wypisujemy

41 c cc cd

Innymi słowy, jeśli ktoś opracowuje zapis heksadecymalny na własną rękę jak ja, niech kasuje pierwsze występujące zera.

5 months later

Siemka, jestem bardzo poczatkujacy co na pewno widac po moim kodzie :slightly_smiling_face:

Na SPOJU WYSKAKUJE ZE MAM ZA DLUGI KOD, w pewnym miejscu kodu 2 razy mam duzo if-ow
i pomyslalem ze mozna zrobic voida z tymi if-ami, a pozniej tylko wywolania dzieki temu skrocilbym kod i moze zmiescilby sie do Spoja,
Jak poprawnie uzyć tutaj Voida prosze o sensowne podpowiedzi, moze jakis link
z góry dzięki

Troche pozmieniałem mimo że tego nie rozumiem, spoj już nie wywala błędu dla zbyt duzego kodu
ale jest błędna odpowiedź :frowning:

prawdopodobnie jeden z testow to -0 co powinno dac 80 0 0 0 ale u mnie daje 0 0 0 0;
pytanie jak zapisac “-0” we float

faktycznie trochę tego kodu jest, nie da się zrobić mniej?
Spróbuj takiego patentu:
float l = 0;
l *= -1;
cout << l << endl;

chyba nie ma innego wyjścia jak dobrać się do bajtów tej liczby i sprawdzić czy pierwszy bit nie jest ustawiony na jeden.
float number;
unsigned char *bytes = (unsigned char *)&number;
i sprawdzić wartość bytes[3].
Z drugiej strony wystarczy tylko te bajty rzutować na hex i wypisać.

5 months later

Witam chciałbym podpiąć się do tematu kod przeszedł test na ideone ale sędzia go nie zalicza może jakiś pomysł dlaczego??

ok dzięki za pomoc jeszcze jedna rzecz była do poprawy ale już śmiga.

1 year later
2 years later

Ja zrobiłem sprawdzanie znaku 0 za pomocą signbit(x) z , ale sprawdziłem że bez tego kod też przechodzi test, najwidoczniej nie ma na wejściu -0