Przedstawiłeś właśnie jedną z metod. Druga metoda, to trzeba bez podglądania obliczyć to co jest w środku. Chyba, że piszesz, ale nie zdajesz sobie sprawy, że istnieje metoda "niesłuszna" - metoda podglądania?
PS
Tak naprawdę, to znam co najmniej trzy metody. Jedna, to ta "jedyna słuszna" -> samodzielne obliczenie [przez własny program] oraz dwie różne "niesłuszne" metody podglądania [działające w C/C++].
Samo policzenie reprezentacji choć możliwe jest dość kłopotliwe dla początkującego programisty.Samo "podglądanie" można zrealizować za pomocą unii,wskaźników lub poprzez bezpośrednie rzutowanie (korzystanie z adresów bez zmiennych wskaźnikowych)... Jeszcze co mi przychodzi do głowy to korzystając z wstawek w asemblerze zrzucenie na stos liczby float i pobranie tablicy char...
NIe tylko.
Program wczytując zmienną typu float, [np cin, lub scanf] uruchamia odpowiednią procedurę/algorytm i robi to co trzeba zrobić w zadaniu - zapisuje sobie tą liczbę właśnie w takiej, potrzebnej postaci. Ale czy autorowi zadania @kuszi o to chodziło? O podglądnięcie i wypisaniu tego co już jest zrobione czy o samodzielne powtórzenie całego tego algorytmu i wypisaniu bajtów w systemie szesnastkowym?. Gdyby wczytywanie było wymuszone jako zmienna typu string, byłoby to całkowicie jasne. W takiej sytuacji sprytni i leniwi programiści skorzystają z podglądnięcia, ambitniejsi .... a także w wypadku innych języków sami napiszą pełny algorytm zamiany, bez "podglądania".
PS
Ja niestety jestem z tych leniwych ... skorzystałem z unii, ale obiecuję poprawę, zmobilizuję się i napiszę kiedyś jak przystało.
Witam pisze program który liczbę zmienno przecinkowa zamienia na kod szesnastkowy. Ale mam pewien problem z obliczenie części ułamkowej na kod binarny. W internecie znalazłem kilka filmów które mi pomogły z tym zagadnieniem (bo wcześniej nie wiedziałem jak ugryź temat ) i w tym filmiku był przykład 5.2 i przedstawienie liczby 0.2 w binarce to 0011 i tak w nieskończoność (odsyłam do filmu https://www.youtube.com/watch?v=n-XozGu1viM20) ale u mnie program jak mnoży 0.4 * 2.0 to mam jakieś 0.7999999 a nie 0.8 i tak dalej i w pewnym miejscy program się kończy bo otrzymuje 1 a nie powinien. Wynik poprawny to 00110011001100110011001 a u mnie jest 00110011001100110011.
tu jest kod http://ideone.com/CLfLW729
ale mam dziwne wyniki:
4
5.2
czesc calkowita5 czesc ulamkowa 0.2
mod 1
mod 0
mod 1
dana liczba:
dana liczba: 1
dana liczba: 0
dana liczba: 1
liczba: 5 w binarnym to: 101
liczba: 5 w binarnym to: 101.
decimal: 0.4
binarka:
binarka: 0
decimal: 0.8
binarka: 0
binarka: 00
decimal: 1.6
binarka: 00
binarka: 001
decimal: 1.2
binarka: 001
binarka: 0011
decimal: 0.4
binarka: 0011
binarka: 00110
decimal: 0.8
binarka: 00110
binarka: 001100
decimal: 1.6
binarka: 001100
binarka: 0011001
decimal: 1.2
binarka: 0011001
binarka: 00110011
decimal: 0.3999
binarka: 00110011
binarka: 001100110
decimal: 0.7998
binarka: 001100110
binarka: 0011001100
decimal: 1.6
binarka: 0011001100
binarka: 00110011001
decimal: 1.199
binarka: 00110011001
binarka: 001100110011
decimal: 0.3984
binarka: 001100110011
binarka: 0011001100110
decimal: 0.7969
binarka: 0011001100110
binarka: 00110011001100
decimal: 1.594
binarka: 00110011001100
binarka: 001100110011001
decimal: 1.188
binarka: 001100110011001
binarka: 0011001100110011
decimal: 0.375
binarka: 0011001100110011
binarka: 00110011001100110
decimal: 0.75
binarka: 00110011001100110
binarka: 001100110011001100
decimal: 1.5
binarka: 001100110011001100
binarka: 0011001100110011001
decimal: 1
binarka: 0011001100110011001
binarka: 00110011001100110011
Wiem ze jest celi round ale to nie działa nawet jak dziele przez 10 100 itd bo czasami mam np 0.332 a czasami 1.4522
Czy jest jakiś sposób na floaty?
To mam całkiem coś nie tak z programem, bo on wypisuje takie odpowiedzi jak ten kalkulator (https://www.h-schmidt.net/FloatConverter/IEEE754.html32) i dla tych danych one się różnią.
Dobra już załapałem o co chodzi ;).
Witam!
Mam problem - na ideone liczy dobrze - a w zaliczeniu wyrzuca bledna odpowiedz.
Pisze w javie.
W czym moze byc problem?
https://ideone.com/1Z4l5W20
Zadanie zaliczone.
Po dokładniejszej analizie zauważyłem że nalezy usuwać wszystkie poprzedzajace zera.
Nie tylko jak w przykładzie z 00 na 0.
Nalezy to rozszerzyc na kombinacji typu 0z na z gdzie z znak z zbioru 0.9 lub.a…f.
Wiec nalezy 0z zapisac jako samo z.
najistotniejszy fragment programu to
String st1 = Integer.toHexString( Float.floatToIntBits( f ) ); //zamiana na szestnastkowy ciag
st1= st1.replaceFirst("(\w{2})(\w{2})(\w{2})(\w{2})" ,"$1 $2 $3 $4"); //podzial ciagu na 4 kawalki ze spacjami
st1= st1.replaceAll("(0)(\w)", “$2” ); //zamiana poprzedzajacego zera w “0z” na "z"
System.out.println(st1);
gdzie f to liczba float
Pozdrawiam
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 191 | Feb 1 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 154 | Apr 2 |
SPOJ.com - Problem ZABAWA pl.spoj.com | Zbiór zadań | 6 | 135 | Jun 23 |