1 / 4
Oct 2016

Cześć, :slight_smile:
Przystopował mnie mały problem w zadaniu z tematu.
Postanowiłem wykonać je krok po kroku z liczeniem mantysy itp.
Mój program prawie dla wszystkich danych liczy prawidłowo, lecz problem zaczyna się gdy
na wejściu podam mu liczbę 0<liczba<1 czyli np. 0.2; 0.421; 0,85.

Mój problem odnalazłem w miejscu liczenia wykładnika.
W moim kodzie liczę to ze wzoru 127 + MiejscaPrzesunięciaPrzecinka.

Moje pytanie: Jak ten wzór powinien wyglądać dla liczby 0<liczba<1.
Czy możecie mi wytłumaczyć, albo odesłać mnie do jakiejś strony?

Przepraszam, za chaotyczny opis .
Dzięki, pozdrawiam.

  • created

    Oct '16
  • last reply

    Mar '17
  • 3

    replies

  • 724

    views

  • 3

    users

Dla osób piszących w C# jest pewien problem z wczytywanie separatora oddzielającego liczby całości od dziesiętnych.
W moim kompilatorze program nie akceptował oddzielania kropką (wyskakiwał błąd) tylko można było rozdzielać liczbę przecinkiem. Sczytując wartość z Console.ReadLine() do zmiennej float zrobiłem zabezpieczenie używając metodę String.Replace(".", ",") tak aby przy sprawdzaniu na wejściu zostały podawane liczby z kropką to żeby nie wyrzucało błędu. Przez dłuższy czas nie mogłem zorientować się dlaczego wyskakuję mi cały czas komunikat "Błędna odpowiedź". Co się okazało kompilator zadania podaje liczby z kropką a nie przecinkiem (na odwrót). Taka drobnostka a zmyliła dobrze :slight_smile :slight_smile:

U mnie raczej ten problem nie występuje. Ogólnie program liczby dobrze wszystkie liczby typu : -2; 0; -521.215; 12.25;

Program podaje nieprawidłową wartość dla liczb: 0,reszta np: 0,2; -0,55, 0.01.

Mój błąd wynika z nie zrozumienia mechanizmu liczenia wykładnika:
U mnie dla takich wartości z zakresu gdzie mam problem wykładnik ma zawsze wartość 127,
a powinien np. dla liczby 0.1 wynosić 123.

Czy jest możliwość abyś opisał mi w jaki sposób u Ciebie program liczy wykładnik?

EDIT:
Właśnie zauważyłem, że oprócz mojego powstały jeszcze dwa takie tematy i myślę, że znalazłem przyczynę moich niepowodzeń, ale sprawdzę to dopiero jak wrócę z pracy :grin:

5 months later

Prosiłbym o wyjaśnienie skąd dla 1 reprezentacja szesnastkowa w postaci: 3f 80 0 0 ??
Rozumie, że wynika to z reprezentacji binarnej w postaci 0011 1111 1000 0000 0000 0000 0000 0000 niestety mi wychodzi 0111 1111 0000 0000 0000 0000 0000 0000.
Jak uzyskać drugie zero w pierwszym członie(0011 a nie 0111)? Pierwsze zero rozumiem to znak dalej exponanta dla 127 czyli 1111111 więc skąd zapis 0011??
Pozostałe testy dla -345, 125.123 i 0 obliczyłem poprawnie według jednego algorytmu, niestety algorytm ten nie sprawdza się dla 1 i -1...