logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Bascom]Jak wyświetlić dziesiętnie double liczbę?

iryseee 10 Sty 2009 15:48 2560 12
  • #1 5977977
    iryseee
    Poziom 14  
    Witam wszystkich mam pytanie tego typu nie wiem jak wyświetlić np.
    za pomocą print liczbę double np. 1000 tak żeby wyświetlało 1000 a nie
    1E3 hex 408F400000000000
    W jaki sposób robi się konwersje na liczbę ?
    i tak przy okazji jak np. Long -234 na liczbę dodatnią ?
    chodzi mi o prawidłowe wyświetlenie liczb na lcd lub za pomocą print.
    Za pomoc z góry dziękuję.
  • #2 5978001
    Freddie Chopin
    Specjalista - Mikrokontrolery
    fajnie ze napisales jaki to mikrokontroler, jaki jezyk programowania, jaki kompilator, ile masz lat i jaki rozmiar buta. bez odpowiedzi na conajmniej 3 z tych 5 pytan nikt ci nie bedzie wrozyl, bo to nie forum o zgadywaniu

    4\/3!!
  • #3 5978186
    iryseee
    Poziom 14  
    atmega128 bascom
  • #4 5979989
    bolek
    Poziom 35  
    Z tego wszystkiego najważniejsze jest stężenie siarki w winie z najbliższego nocnego.

    Zamiana liczby 1234 na ASCI

    1234/10=123 reszty 4, dodajesz do tego 30h i możesz wysłać do LCD/uarta- wyświeli ci cyfre 4

    123/10=12 reszty 3, dalej robisz jak wyżej
    .
    .
    .
    1/10=0 reszty 1, dalej robisz jak wyżej

    Zrozumiał?


    Zamiana dodatniej na ujemna (i w drugą strone).
    Wartość trzeba zanegować i dodać 1. Na początek, żebyś załapał o co chodzi poprogramuj sobie windowsowski kalkulator w widoku naukowym, zwracajać uwage na rozmiar liczby (byte, word...)
  • #5 5980161
    zumek
    Poziom 39  
    bolek napisał:
    Z tego wszystkiego najważniejsze jest stężenie siarki w winie z najbliższego nocnego.

    Chyba za dużo go dziś posmakowałeś :D
    bolek napisał:

    Zamiana liczby 1234 na ASCI

    1234/10=123 reszty 4, dodajesz do tego 30h i możesz wysłać do LCD/uarta- wyświeli ci cyfre 4

    123/10=12 reszty 3, dalej robisz jak wyżej
    .
    .
    .
    1/10=0 reszty 1, dalej robisz jak wyżej

    Zrozumiał?

    I na LCD/terminalu ujrzymy 4321 :|


    bolek napisał:

    Zamiana dodatniej na ujemna (i w drugą strone).
    Wartość trzeba zanegować i dodać 1.

    A nie wystarczy pomnożyć przez (-1) :?:
    Poza tym , mówimy o zmiennej typu Double w Basicu.
  • #6 5980453
    bolek
    Poziom 35  
    i co z tego ze pije, za swoje pije!. Z mamą i bratem mamy rente na spółe :P

    fakt faktem że zapomniałem o wyświetlaniu od końca (po siarce z Machowa są takie efekty), nie mnie idea postępowania chyba jest oczywista.

    co do mnożenia przez -1. Negacja i inkrementacja to raczej robiona jest sprzetowo. Ciekaw jestem ile bascom potrzebuje cykli na taki zabieg
  • #7 5980473
    iryseee
    Poziom 14  
    Witam Ponownie sorry ale byłem na urodzinach.
    zrobiłem *-1 i jest wynik.

    G = &HFFFFFFFF00000000
    Double:-4.294967296E9 C1F0000000000000
    Print "Double:" ; G ; " " ; Hex(g)
    i wyświetla liczbę;Double:4.294967296E9 41F0000000000000
    i jest dylemat dlaczego liczba hex:
    C1F0000000000000 a po zamianie na dziesiętną hex:41F0000000000000
    się zmieniła ?
    ja chcę wyświetlić prawidłowo liczbę hex: C1F0000000000000
    w zapisie dziesiętnym a nie zamienić hex:C1F0000000000000 na
    hex:41F0000000000000
    sprawdzę kolegę Bolek jeszcze i odpiszę.



    G = G * -1

    Dodano po 24 [minuty]:

    Wygląda to tak:
    g=g-1

    Double:4.294967296E9 hex:41F0000000000000
    po sprawdzeniu daje mi taki efekt:
    Double:429.4967296E6 41B999999999999A
    Double:42.94967296E6 41847AE147AE147B
    Double:4.294967296E6 4150624DD2F1A9FC
    Double:429.4967296E3 411A36E2EB1C432D
    Double:42.94967296E3 40E4F8B588E368F1
    Double:4.294967296E3 40B0C6F7A0B5ED8E
    Double:429.4967296 407AD7F29ABCAF4A
    Double:42.94967296 4045798EE2308C3B
    Double:429.4967296E-3 3FDB7CDFD9D7BDBD
    Double:42.94967296E-3 3FA5FD7FE1796497
    Double:4.294967296E-3 3F719799812DEA12
    Double:429.4967296E-6 3F3C25C268497683
    Double:42.94967296E-6 3F06849B86A12B9C
    Double:4.294967296E-6 3ED203AF9EE75616
    Double:429.4967296E-9 3E9CD2B297D889BD
    i Jak na razie wyświetla mi się coś takiego to chyba nie to o co mi
    chodziło?


    Ja chcę hex:41F0000000000000 tę liczbę wyświetlić
    dziesiętnie.
    a nie zmieniać wynik na: 3E9CD2B297D889BD po jakiś działaniach
    liczba 41F0000000000000=41F0000000000000 a, dziesiętnie jak ją wyświetlić ?

    Dodano po 9 [minuty]:

    np. word = hex:ffff
    dziesiętnie 65535
    double 1000
    dziesiętnie 1E3 hex:408F400000000000
    chcę liczbę double 1000 wyświetlić dziesiętnie za pomocą lcd lub print 1000
    a nie jak mi wyświetla 1E3.
    Jak to można zrobić naj prościej ?
    Wielkie dzięki za opis jak to zrobić podpowiedź wiem że to tylko przekształcenia proszę o konkretny przykład
    :cry:
  • #8 5980920
    iryseee
    Poziom 14  
    Witam ponownie a czy w ten sposób jest ok ?

    Konwersja z liczby 16 na dziesiętną

    2 1 0
    =(16*16)*2 =11*16 =13
    2BD 512 176 13
    = 512+ 176+ 13
    701
  • #10 5981476
    marek_Łódź
    Poziom 36  
    Co to jest double. U mnie w BASCOM-AVR nie ma tego typu

    Dokładnie tak, jak napisał przedmówca. Funkcja Hex oddaje wewnętrzną reprezentację zmiennoprzecinkową, która potraktowana jako liczba stałoprzecinkowa daje bzdurę. Jeśli interesuje Cię wewnętrzna reprezentacja liczby, musisz ją rozbić na cechę (wykładnik) i mantysę i pamiętać o czymś takim, jak normalizacja oraz znać podstawę (zmienny przecinek jest realizowany na ogół przy podstawie 2 lub 10) i format (np sposób zapisu ujemnych). Reprezentacja jest opisana w helpie BASCOM'a
  • #11 5982211
    iryseee
    Poziom 14  
    Dzięki za podpowiedzi teraz wiem że double jest liczbą zmiennoprzecinkową i występuje jako liczba dodatnia jak i ujemna. Teraz zostaje tylko przeliczanie na liczbę ........... a to mi się wydaje jak na razie nie tak proste.
    To znaczy że nie wiem jak się za tą double zabrać. A może na początek bym się musiał nauczyć jak zamienić liczbę Integer (2bajty) -32768 do 32767.
    Więc moje pytanie brzmi jak się zamienia liczbę -32768 czy -32768*-1=32768 czyli 32767+32768=65535 ale to już musi być zapisane
    jako Liczba Word?
    W taki razie liczba Long(4bajty) reprezentuje -2^32 do 2^32-1 to znaczy że zakres liczby całkowitej wyświetlanej max jest 2^32-1 ?
    Proszę o jakieś sugestie inne podpowiedzi.ΣΦΨ≤≥ω:?:
  • #12 5984052
    marek_Łódź
    Poziom 36  
    iryseee napisał:
    To znaczy że nie wiem jak się za tą double zabrać.
    Jeśli jest to potrzebne, to proponuję na początek obejrzeć np. w pracy krokowej reprezentacje prostych liczb.

    Dim S As Single                                             'double
    Dim Sx As String * 10
    
    S = 1
    Sx = Hex(s)
    S = 0.5
    Sx = Hex(s)
    S = 0.25
    Sx = Hex(s)
    S = 1.001
    Sx = Hex(s)
    S = 2
    Sx = Hex(s)
    S = 1024
    Sx = Hex(s)
    S = -1
    Sx = Hex(s)
    S = -0.5
    Sx = Hex(s)
    S = -0.25
    Sx = Hex(s)
    S = -1.001
    Sx = Hex(s)
    S = -2
    Sx = Hex(s)
    S = -1024
    Sx = Hex(s)
    
    End
    ...itp

    Po skonfrontowaniu tego z opisem reprezentacji zmiennoprzecinkowej (w helpie BASCOMa) powinno się conieco wyjaśnić.
  • #13 5986363
    iryseee
    Poziom 14  
    Dzięki dopiero wieczorem dzisiaj sobie to po analizuję w sumie ciekawe rozwiązanie. :D
REKLAMA