zmieniłem wynik z milisekund na sekundy poprzez elapsedTIme = (millis() - startTime)/1000, jednakże "elapsedTime" nie wyświetla wyniku po przecinku a zaokrągla liczby. Jak sprawić by zmienna elapsedTIme wyświetlała liczby niecałkowite? Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Użytkownik zmienił wynik pomiaru...
A tak z ciekawości to pokaż cały kod. W czym kompilujesz ? Przy okazji użyć syntaxu C++ będzie czytelniej. Kolega Sedr sugeruje, że wprowadzasz dane w nieprawidłowy sposób, to częsty błąd. Czy po wprowadzeniu z kropką zamiast przecinka nadal są jakieś problemy ?
Witam. Próbuje od jakiegoś czasu pojąć dlaczego dzielenie dwóch liczb zwraca mi zero, jak w kalkulatorze zwraca mi to 0,20~ float test = 2518/12512; sprintf_s(buf, "%f", test); Gdzie wynikiem jest 0.0000 Masz dzielenie stałoprzecinkowe, bo argumenty są całkowite. [syntax=c]float test = 2518.0/12512.0; [/syntax]
(int)/(int) - dzielenie bez przecinka (procesorowy DIV jednostki ALU) (int)/(float) lub (float)/(int) lub (float)/(float) - dzielenie zmiennoprzecinkowe (jednostka FPU) 1 <- liczba typu (int) 1.0 <- liczba typu (float)
super ekstra przybliżenia nie uzyskasz nie mając liczb zmiennoprzecinkowych ale mają DINT (32bity) można zrobić dzielenie pierwsze co to otrzymaną ilość spalonego paliwa zakładając że jest to X litrów mnożysz X przez potęgę 10, potęgę trzeba dobrać tak aby po pomnożeniu nie przekroczyła limitu dla DINT ja zrobiłem np 15x1 000 000 następnie dzielimy...
Tak jak w temacie, mam nadzieję, że coś pomoże. Komunikaty przekopiowane żywcem z forum sklepu PCProjekt. 0. 0x0000 Operacja zakończona pomyślnie. 1. 0x0001 Niewłaściwa funkcja. 2. 0x0002 System nie odnalazł określonego pliku. 3. 0x0003 System nie odnalazł określonej ścieżki. 4. 0x0004 Otwarcie pliku jest niemożliwe. 5. 0x0005 Brak dostępu. 6. 0x0006...
Nie wiem w jakim srodowisku piszesz ale np. w Keilu dla 51 tez taki zapis nie przynioslby skutku, gdyz funkcja sprintf jest typu non-reentrant . Musisz zmienic zapis na: unsigned char Line[17]; float result; result=234.0/212.0 sprintf(Line, "%f", result); LCD_Write(Line); Powinno zadzialac. Pozdrawiam BF
Cena nie zmienia się ponieważ dzielenie wykonujesz na liczbach całkowitych, a zatem i wynik wyrażenia w nawiasie tez jest liczbą całkowitą! Chcąc być poprawny pownieneś mnożyć przez 0.01 albo dzielić przez liczbę zmiennoprzecinkową czyli 100.0 void Towar::potrac_opust (int rabat) { Towar::cena-=cena*(rabat/100...
Najpierw poczytaj co to są liczby stałoprzecinkowe i zmiennoprzecinkowe. Takie dzielenie jak tu zostało zaprezentowane jest na liczbach stałoprzecinkowych. W takim przypadku to ty decydujesz gdzie będzie przecinek i czy w ogóle będzie. Po za tym powtórzę się za kol koodpl : po co takie rzeczy rzeźbić w asm?
tylko w jaki sposób zamierzasz zaimplemetować dzielenie zmiennoprzecinkowe (Nclk>>Nx)? Tu właśnie jest sedno sprawy poruszone. Wie ktoś może jak należy wykonać dzielenie dla dużych liczb?
Witam Poszukuje schematow na bramkach logicznych realizujących dodawanie, odejmowanie, mnożenie, dzielenie na liczbach zmiennoprzecinkowych (format obojętny). Z góry dziekuje.
Brrr, Basic. ;) Przerzuć się na C lub asemblera. Nowe AVRStudio można zintegrować z WinGCC i działa to bez zarzutów. A w C deklarujesz sobie od razu, czy masz zmienną całkowitą (char, int), czy zmiennoprzecinkową (float) i o dziwo artytmetyka zmiennoprzecinkowa nie zajmuje ogromnych ilości flasha. :)
Zmusza. Dzielenie i mnożenie na liczbach zmiennoprzecinkowych nie są tak upierdliwe jak dodawanie i odejmowanie. Ten dodatkowy kilobajt to procedury konwersji, mnożenia i dzielenia na liczbach zmiennoprzecinkowych.
Toshib : Wszystko zależy od typu dzielenia. zmienna "x" jest typu int, a więc całkowitoliczbowa. Tak więc 1/x jest dzieleniem całkowitoliczbowym (dla x=1 równe 1, powyżej równe 0, dla x=-1 równe -1, poniżej równe 0). Zamiana 1 na 1.0 wymusza dzielenie zmiennoprzecinkowe, przez co działanie jest wykonywane poprawnie. ps. Moja zasada dotycząca liczb...
Generalnie jeśli zależy Ci na równomiernym rozkładzie, to oczywiście można to osiągnąć, jednak z wykorzystaniem jednostki zmiennoprzecinkowej, co niestety negatywnie wpłynie na wydajność (sam coś takiego robiłem kiedyś ;) ) Po prostu dzielisz cała długość przez ilość elementów i inkrementujesz liczbę zmiennoprzecinkową wykorzystując do indeksowania...
napisz w języku C funkcję, która dzieli dwie liczby zmiennoprzecinkowe mające długość do tysiąca cyfr w zapisie dziesiętnym Zadanie to przekracza możliwości języka C i zwykłych typów zmiennych, które nie są w stanie pomieścić tak dużych liczb zmiennoprzecinkowych. Aby rozwiązać ten problem, należy skorzystać z bibliotek matematycznych, takich jak GMP...
Proszę bardzo wyjaśnienie poniższych tematów: 1) Jak zamienić liczbe ułamkową na U2 [również daną w postaci zmiennoprzecinkowej] 2) Jak odczytywać liczbe zmiennoprzecinkową? 2) Jak wykonać działanie mnożenia na liczbaczh zmiennoprzecinkowych [z użyciem i bez użycia rozszeżeń] 3) Jak wykonuje się pierwiestkowanie liczb zmiennoprzecinkowych. 4) Jak wykonać...
Ad te sumy, to jeszcze raz zwracam uwagę na pytanie, na ile potrzebujesz dokładności. Jeśli nie jest ona znacząca, to śmiało można posługiwać się zmiennoprzecinkowym (acz znacznie wydłuży się czas sumowania). Jeśli masz prime[x/BITS] >> (PIECES - (x/BITS)) to jest błędne to przesuniecie. Tam musi być reszta z dzielenia, nie dzielenie. Poza tym to przecież...
Zadeklarowałeś int a, b; a wczytujesz do nich wartości zmiennoprzecinkowe. Może warto jednak być mniej upartym i zadeklarować w ten sposób? float a, b; :)
zawsze mozesz scastowac... jak kolega wyzej napisal ktoras ze zmiennych jest calkowita i sta niepoprawne dzielenie...
Czy ktos mi pomoze zdobyć jakieś infornacje związane z prostymi operacjami arytmetycznymi zmiennoprzecinkowymi (dodawanie, odejmowanie, mnozenie?. dzielenie?) na MCS-51. Będe wdzięczny za jakis programik (w asemblerze) na ten temat. Dzięki.
Dziękuję za propozycję. Sam też się znam trochę na optymalizacji i z chęcią się nią bawię. Zresztą o czymś muszę w pracy magisterskiej napisać :D Co do architektury to są faktycznie z nią problemy. Podobnie jak AVR'y ARM'y nie mają wbudowanego dzielenia. Całe niezbędne dzielenie trzeba robić software'owo. Jest to spore utrudnienie i spowolnienie działania....
Cyz koś mogłby wyjaśnić pojęcie liczby zmienniprzecinkowej. Jakie są standardy ? Jak wykonać działania : "+" ; "-" ;"*" ; " / " czyli dodawanie, odejmowanie, mnożenie, dzielenie. Dzielenie nieotwarzające. Pozdrawiam.
No właśnie... Głupie dzielenie czy operacje na liczbach zmiennoprzecinkowych to przecież kolejne funkcje, których adres w kodzie jest zakodowany WPROST... 4\/3!!
Obawiam się, że ATtiny2313 może mieć za mało pamięci do obliczeń na liczbach zmiennoprzecinkowych...
Nie wiem co ten program robi, ale na pewno nie to, co ma w komentarzach. Z definicji liczby zaprzyjaźnione to para liczb - a Twój program sprawdza jedną liczbę? Edit: ok, już widzę jak to ma działać - sprawdzasz czy dana liczba ma liczbę zaprzyjaźnioną. Całe to dzielenie liczb zmiennoprzecinkowych... Nie wystarczy: if (a % b == 0) /* jeśli a...
Np. dać zmienną logiczną warunkującą poprawność wyniku, która będzie ustawiana po drugim odczycie. Dzięki, dodałem tę zmienną. Jakbym mógł to uprościć, bo to jest dzielenie liczb zmiennoprzecinkowych i na pewno długo to CPU oblicza czy nic nie ruszać ? [syntax=c]czas = ( float ) nowy_czas / 1000; // z [ms] na [s] predkosc = ( float ) droga / ( float...
Jednak pomysł pisania "lepszych" wersji funkcji z math.h jest bez sensu - jedyne na czym zaoszczędzi taki "recznie" napisany cosinus to dokładność - znaczną większość kodu takich funkcji i tak stanowią operacje typu mnożenie / dzielenie liczb zmiennoprzecinkowych. Uwierz mi, że jest czasem taka potrzeba (; Zaoszczędziłem dużo cykli, dzięki temu na...
no i cos pokreciłem. Najpierw pomnóż wynik *100, potem dzielenie \10 (koniecznie w tą strone ten ukośnik) a potem normalnie przez /10. Środkowe dzielenie zapewni odciecie wyniku do całkowitej wartości.
A bo bascom to taki kaszaniasty trochę jest jeżeli chodzi o wydajność i dzielenie za pomocą '/' wykonuje jako zmiennoprzecinkowe, czyli obie liczby na zmiennoprzecinkowe zamienia, dzili i wynik zamienia na format docelowej wartośc (i tu chyba jest coś skopane). Natomiast dzielenie za pomocą '\' to dzielenie na liczbach całkowitych, o wiele szybsze.
To jest dość proste do rozwiązania. Załóż, że użyjesz EPROMu. Masz dwie zmienne 4-bitowe, wynik ma składać się z (zapewne) 3 lub 4 znaków. Podłącz do EPROMA: - nogi A0-A1 - wejście do multipleksowania wyświetlacza (do obsługi czterech cyfr) - nogi A2-A5 - wejście argumentu #1 - nogi A6-A9 - wejście argumentu #2 - nogi A10-A11 - wejście typu operacji...
Tablicę masz typu Integer, a dzieląc przez 2 wykonujesz operację zmiennoprzecinkową. Uzyj dzielenia stałoprzecinkowego (div) lub zaokrąglij wynik (Round).
Dim T1 As Single Dim T2 As Single A co to? "Przesunięcia bitowe" na liczbach zmiennoprzecinkowych? Zamień single na int i powinno śmigać. Procedury obliczeńna liczbach zmiennoprzecinkowych pożerają mnóstwo miejsca. Dzielenie liczb całkowitych w bascomie AVR robi się za pomocą \, a nie /, ot taka ciekawostka. Użycie / powoduje wykonanie tego dzielenia...
W moim przypadku (ten EKG), ponieważ ten TMS miał tylko arytmetykę stałoprzecinkową, stosowana była taka arytmetyka mieszana - FFT było liczone stałoprzecinkowo (dokładnie to zaprzecinkowo - liczby traktowane jako (-1, 1)), natomiast w przypadku wystąpienia przepełnienia (tylko podczas dodawania) wywoływana była prosta funkcja dzielącą każdą liczbę...
Chciałem Ci tylko zobrazować jak to zrobic. Nie musisz dzielić a ni mnożyć tych "10do-1". Te 10do-1 to info dla ciebie ile liczba ma miejsc po przecinku. To jest wszystko prosta matematyka, gdzie pewnych rzeczy sie poprostu nie liczy tylko wpisuję jako stałe. Jak chcesz robić wszystkie działania matematyczne na uP to niestety pozostaje tylko C. Funkcja...
Powinieneś dokonać konwersji z liczby zmiennoprzecinkowej do Stringa skoro wykonujesz dzielenie. np. FloatToStr
Użyj języka wysokiego poziomu (C lub Bascom), wtedy nie będziesz miał problemów z arytmetyką zmiennoprzecinkową.
Chyba nie czytałeś ostatnio tego rozdziału z Language Fundamentals. W ten sposób sam sobie robisz kuku... Pomijając to myślę, że jeśli te Twoje zmiennoprzecinkowe masz tylko do dwóch miejsc po przecinku, to dlaczego, po prostu, nie pomnożysz tego x100 a na końcu wyniku nie podzielisz /100? Zapewne wszystko się wykona dużo szybciej niż na tych zmiennoprzecinkowych....
Musisz tylko użyć zmiennych zmiennoprzecinkowych (signle, real, double, extended)
lukaskay - nie piszę w Bascomie więc się nie podejmuję :) Zwróć uwagę, że w proponowanej przeze mnie metodzie pomiaru będziesz musiał wykonać dość niewygodne dzielenie stałoprzecinkowe, albo użyć liczb zmiennoprzecinkowych. Na pewno mniej dokładny sposób pomiaru jest łatwiejszy do obróbki numerycznej. Pozdrawiam, Dr.Vee
Wielkie dzięki za pomoc. Używam zmiennej typu Single ponieważ w dalszej części występuje dzielenie i pojawiają się liczby zmiennoprzecinkowe a z tego co sie orientuje to Word ani Integer takiej możliwości nie mają (chyba, że mają?) :)
Zaoszczędziłem 32bajty. A teksty z lini: 45, 47, 304, 373, 477, 517, 519, 566, 568, 614, 616, 663, 665, 713, 715, 761, 763, 798 dlaczego nie są w Eepromie :)? Możesz wykasować spacje w łańcuchach i zmodyfikować początek Display_msg. Te wszystkie sztuczki pozwolą ci zaoszczędzić parę bajtów , ale największe oszczędności przyniesie ci rezygnacja z liczb...
Mam za mało czasu jeśli chodzi o naukę C. Co do zmiennoprzecinkowych to w pewnych musze ze względu na dzielenie które jest nieuniknione. Chciałem się upewnić czy rozkład zadań jest odpowiedni.
Takie pisanie programu przy pomocy CASE`ów moim zdaniem woła o pomstę do nieba. Program jest napisany niechlujnie i nieczytelnie. Wiem że pewnie Tobie jest to obojętne, ale dzięki temu łatwo zrobić błąd. 1. NIE baw się w takie pokręcone CASE, wystarczy przecież stablicować napisy a potem zrobić wywołanie printf("%s ",tablica case 9: printf("dziewietnascie...
char st1 to nie zadziala. tablice nalezy inicjowac rozmiarem znanym podczas kompilacji. masz wiec dwa wyjscia: 1. albo rozmiar na sztywno 2. albo szybki kurs uzycia funkcji malloc i obslugi dynamicznego przydzialu pamieci (obstawiam, ze jak procek nie ma pozadnej ilosci RAMu, to nawet nie ma co probowac) x = 53.7; <-------------------- tu muszę...
Na wstępie przeczytaj, a choćby przejrzyj dowolną książkę o DSP tego bez liku w sieci. Ad. 2. Liczne zespoloną zapisz w postaci 2 liczb Re i Im, gdyż tak to się robi w DSP. Ilość bitów jest dowolna, zależy tylko od ciebie ale to wiąże się z dokładnością obliczeń. Formaty licz zmiennoprzecinkowych są standaryzowane, jest ich kilka poszukasz znajdziesz...
1. Dzielenie modulo % jest zdefiniowane dla liczb całkowitych, Ty musisz użyć modulo dla zmiennoprzecinkowych (biblioteka math.h). 2. W sumie ręce opadają, jeżeli chcesz poprawnie skompilować to co wkleiłeś.
Błędy były gdzieś w procedurze wyświetlania. Wyrzuciłem ją i tak jak radził BlueDraco wyświetlam przecinek między ostatnimi liczbami. A wartość mnożę i dzielę przez 10.
Jeśli nie potrzebujesz liczb zmiennoprzecinkowych, to pewnie duża dokładność nie jest Ci potrzebna. Więc lepiej zamiast mnożyć przez 1000 i dzielić przez 14, po prostu podziel X przez 71. A funkcje do mnożenia i dzielenia na '51 są w internecie tak powszechne jak spam. Ewentualnie możesz podejrzeć jak to robi kompilator.
No tak... po co się nauczyć lepiej programować, skoro można kupić arma za 3x taką cenę i uwalić go basicem :) Tak się składa, że umiem "dobrze programować" (zapraszam na www.soft4cnc.pl) i dlatego właśnie jestem zachwycony tym Basicem. Bo mimo kolegi sugestii, jakoby język C do programowania mikrokontrolerów różnił się zasadniczo od Basica do tego...
Pisząc "surowa wartość" miałem na myśli to, co zawierają rejestry %AI, ale rozumiem w czym rzecz. Albo konwersja na liczbę zmiennoprzecinkową i potem dzielenie przez 20 (nie tracimy dokładności, ale wykonujemy operacje na liczbach zmiennoprzecinkowych), albo możemy tylko pomnożyć wartość z rejestru %AI przez 5 BEZ wcześniejszej konwersji sygnału i wtedy:...
jak zadajesz takie pytanie, to zawsze podaj: -jaki procesor -ile ew. masz miejsca w pamieci (na tablice itd.) -raczej podawaj dokladnie problemy, bo to jest dosyc ogolne... -jaka ma byc dokladnosc tego jest cos takiego jak fixedpoint math - to taka matematyka na liczbach ulamkowych z uzyciem liczb calkowitych. Polega to na tym, ze zamiast...
Można to zoptymalizować i nie przeliczać na Volty w ogóle, ale tak bedzie prościej zobrazować. Jeśli napięciem odniesienia jest AVCC to znaczy że 5V trzeba teoretycznie podzielić przez rozdzielczośc 1024 i wyjdzie 0.00488 no i to się często zaokrągla do 0.0049 Teraz żeby odczytać napięcie wystarczy pomnożyć odczytany wynik przez te 0.0049, ale to wymusza...
Problem leży w operatorze '/' - dzielenie. W C oznacza on zarówno dzielenie całkowite (DIV) jak i dzielenie normalne (liczb zmiennoprzecinkowych). Odpal sobie taki kod : #include <stdio.h> #include <stdlib.h> int a; int b; float x; main(){ x = 0.5; // = 0.5 :) printf ("x = %g \n",x); x = float(1/2);...
Zauważ że funkcja zwraca ci wynik działań jako liczbę int, a ona nie przedstawia liczb zmiennoprzecinkowych. Zdeklaruj "wynik" jako float lub double Troszkę pozmieniałem twój kod i mi działa normalnie(porównaj sobie): #include <iostream> #include <conio.h> using namespace std; float dzialanie(float a,float b,int dzial);//1,1 int...
a to już zupełnie inna historia... Generalnie: nie liczyć zmiennoprzecinkowo - za mały procek - nie pomieści biblioteki. Trzeba liczyć stało pozycyjnie, np tak: x * 0.83 = (x * 849 ) / 1024; // czyli x * 0.84 = (x * 849) >> 10; jak masz zmienną a powiedzmy z zakresu (0.0 , 1.0), to mnożysz ją tak, żeby była z zakresu 0...1023 i zamiast x *a masz (x...
C = (10*A) / (11*B) Tak sobie patrze na to i przychodzi mi jeden artykuł do głowy, który ostatnio przeczytałem. Zbieg okoliczności czy twój laborant chce cię wykorzystać ?? No a w core generator xilinxa masz ip cory dla arytmetyki zmiennoprzecinkowej (mnożenie i dzielenie). pozdrawiam. [url=http://kik.weii.tu.koszalin.pl/pub/...
Typy się kłaniają, typy danych, jeśli więc zrobisz tak: dim droga as long dim droga1 as single droga1 = droga/12.54 to powinno zadziałać ;) przecież dzielisz nie przez liczbę całkowitą tylko zmiennoprzecinkową, a więc w wyniku też masz dostać zmiennoprzecinkową - dlatego trza wybrać typ single w Bascomie. Ale to z kolei spowoduje ci straszny rozrost...
nie, dzielisz na liczby zmiennoprzecinkowe o podwojnej precyzji i wysylasz w kolejnosci losowej... <sciana> wez no poczytaj na necie o tym co to jest string, char i o sposobie zapisu znakow wg ASCII. na przyklad tutaj http://www.exforsys.com/tutorials/c-lang... http://www.google.com/search?client=oper...
W zasadzie większość rozkazów DSP realizowanych w jednym cyklu zegara dotyczy tylko stałoprzecinkowych rozkazów. Np. rozkaz MAC na stałym przecinku zajmuje 1cykl, a w arytmetyce zmiennoprzecinkowej 3 cykle. Arytmetyka zmiennoprzecinkowa nie obsługuje też rozkazów SIMD. Ja w zasadzie korzystam tylko z rozkazów zmiennoprzecinkowych gdzie przykładowe rozkazy...
Chyba będzie najlepiej jak posłużę się przykładem. Przedstawiam wartości maksymalne. przyklad 1. x=ADC/timer - x to bedzie duży ułamek np. 0,00 999 999 999 będzie użyty jako stała wyliczona na początku z przetwornika ADC i timera, timer może przyjąć nawet wartość 9 999 999 999 999 przyklad 2. y=timer2*x - timer2 moze przyjmowac wartosci 9 999 999 999...
Ta biblioteka co Ty używasz to tylko współpracuje z zewnętrznymi EEPROM'ami? Chcę używać biblioteki, która pozwala zapisywać w łatwy sposób między innymi liczby zmiennoprzecinkowe do pamięci wewnętrznej procesora bez zabawy w dzielenie na części i zapisywania po kawałku w kolejnych komórkach.
No widzę że wszędzie używając tych funkcji podaje się wartości całkowite, jednak w opisach tych funkcji jako wartość wejściowa podawane jest double a nie int, czy dokładniej uint. http://www.nongnu.org/avr-libc/user-manu... To raczej chyba anie nie błąd, ani głupota programistów, dlatego drążę temat:) Co do zmiennoprzecinkowych...
I prawidłowo zwraca. (int)((int)25)/(int)16) jest równe jeden. To, że wynik ma być double nie ma żadnego wpływu na argumenty. Co innego gdybyśmy mieli dzielenie int przez float, czyli np. 25/16.0.
Z tego co widzę tutaj: [url=http://www.ideone.com/]ideone to Twój kod poprawnie wyświetla wartość Celcjuszy. Myli się z Fahrenheitem, ale to wina napisanego kodu. 9/5 jest równe 1 dla maszyny. Albo wymuś obliczenia zmiennoprzecinkowe (wstawiając wcześniej (-1*)) albo zmień kolejność operacji (dziel na końcu)]Link
wiem że jakieś nadpróbkowanie tu jest ale jak to możliwe? Przecież dodaje 128 próbek i dzielę przez 128 Liczy średnią, najprawdopodobniej nadpróbkowuje. Z programu nie da się wywnioskować danych wejściowych, można tylko domniemywać. Przez 128? A dlaczego nie przez 4? Otóż jeśli używasz float, to masz możliwość zapisu tych dodatkowych bitów i to jak...
bynajmniej. uzycie jednej funkcji pociaga za soba lawinowe dolaczanie kolejnych, ktore sa (lub moga byc) wykorzystane. uzywanie liczb zmiennoprzecinkowych pociaga za soba dolaczenie funkcji do rozbijania liczby zmiennoprzecinkowej na mantyse i wykladnik, operowania na mantysie i wykladniku a nastepnie do poskladania tego w calosc. skoro zas procesor...
W bascomie też masz liczby zmiennoprzecinkowe- np. typ single. Jest też konwersja i dzielenie z resztą modulo. Tylko Attiny2313 może się w pewnym momencie okazać za mały. Ta część całkująca- to w zasadzie ograniczenie od góry PWM- oczywiście nie może być większe niż 100%. Znalazłem kiedyś taki link: http://elm-chan.org/works/smc/report_e.h... Ale go...
Niestety nie - T1 zmienia się wraz z temperaturą ale nie jest to temperatura podana w sposób jawny. Ja w swoim układzie stosuję do tego celu po prostu DS18B20. Wracając do obliczeń, możesz zmniejszyć błąd wyniku do znacznie poniżej 1hPa modyfikując je tak: [syntax=c]dUP=100*((int32_t)D1-(int32_t)... dT=(int32_t)T1-(int32_t)T0; // jeśli T1 nigdy nie...
Obliczenia sa dziecinne proste: T = T*10, T= T/16 i wychodzi wynik np przy 14.5 st 145 który potem dzielisz przez 10 i masz całe stopnie a z funkcji mod otrzymujesz dziesiatki stopnia. Odpadaja funkcje zmiennoprzecinkowe. Rozdzielczosc pomiaru ds18b20to 0.06 st C z groszami.
nawiasy! nawiasy! nawiasy! nawet nie wiesz jak dlugo szuka sie bledu w takich makrach jak zapomnisz nawiasow. nawias przy (x) jest, to dobrze, ale nawias przy calym makrze tez musi byc! 1<<KHZ2MS(27) zgadnij co z tego wyjdzie? <: a co do glownej mysli: przy operacjach na liczbach calkowitych nalezy pamietac, zeby ZAWSZE najpierw mnozyc, a dopiero...
Ciezkao stwierdzi sadze ze okolo 100 ale to jest tylko w przypadku A0 i A1 , adc z A2 potrafi wskazywac temp nawet 250 stopni i ja utrzymywac Jeśli rzadkie to problem rozwiążesz, zresztą jeśli to sterowanie i i tak powinieneś tak zrobić, uśredniając wyniki. Uśredniać można na kilka sposobów, wybierz najlepszy dla ciebie (tablica wyników, dodawanie...
Standardowo ani verilog, ani vhdl nie oferują syntezy operacji zmiennoprzecinkowych. Będziesz więc musiał albo napisać własną implementację tych operacji, albo znaleźć gdzieś gotowy kod (o ile o to chodziło zadającemu zadanie...). Możesz też wykorzystać algorytm Cordic, zapewne będzie prostszy do implementacji (dodawanie/odejmowanie/shift) niż dodawanie/mnożenie/dzielenie...
Problem leży w twoim kodzie gdzie popełniłeś jakiegoś babola i nawet nie wiesz gdzie ten babol jest. Być może zrobiłeś gdzieś dzielenie w ten sposób, że kompilator dociągnął sobie dodatkowe biblioteki do obsługi liczb zmiennoprzecinkowych - to najczęstszy babol gdy widzę u kogoś taki nagły przyrost pamięci RAM i FLASH No chyba że w ogóle kompilujesz...
ZM to raczej Znak Moduł. Więc te liczby mnożymy/dzielimy tak jak zwykłe liczby 3-bajtowe, jedyna różnica polega na tym, iż najstarsze bity z każdej liczby nie wchodzą do działania a są ze sobą "xorowane". Jeśli chodzi o sformalizowane algorytmy to znjadziesz je np. w "Metody i układy arytmetyki komputerowej" autorstwa Janusza Biernata. A poza tym obadaj...
Przede wszystskim trzeba wiedzieć co to za procesor. Domyślam się że 8-bit - więc nie ma instrukcji do dzielenia 16-bit (pomijam jakieś 'super-wynalazki' z układem arytmetyki zmiennoprzecinkowej itp.) Trzeba napisać lub poznać podprogram który dzieli liczby 16 bitowe i według tego się kierować.
Robiłem kiedyś projekt na uczelni na DSP TMS320C6711. Jest to DSP który ma moduł zmiennoprzecinkowy. DSP od np. ARMa czy AVR czy i386 różni się głównie tym że potrafi w jednym cyklu pomnożyć i dodać tzw. MAC (multiply and accumulate). Ma dwie szyny danych z jednej przyjmuje wartości i z drugiej też. Niby nic ale wież mi jeśli chcesz obliczyć FFT (furiera)...
OMG... odpadlem [; czlowieku! liczba twoja zajmuje dwa bajty. wiec najpierw zapisz ... pierwszy, a potem... drugi. po co te kombinacje? moze zapisuj to jako ilosc wielokrotnosci jakiejs fajnej liczby pierwszej (np 23) oraz reszta - bedzie jeszcze bardziej bezsensownie. mozesz zapisywac w eepromie 16bitowo? no to w ogole po co te kombinacje? moze pokombinuj...
Mnóstwo instrukcji assemblera nie może być wykonanych w jednym cyklu zegara... w sumie wszystkie wykonywane są w tej samej liczbie i zależy ona od PIPELINE'u... pobranie instrukcji, dekodowanie, wykonanie, zapis do pamieci, akumulacja wyniku. To jest taki najprostszy pipeline i umożliwia on właśnie wykonywanie instrukcji w "jednym" cyklu zegara.......
Najlepiej będzie pozakać to na przykładzie: - zamiana liczby 2527,78125 (dec) na hex Cześć całkowitą 2527 dzielisz przez 16 (i zapisujesz reszty z dzielenia) tak długo aż otrzymasz wynik dzielenia równy zero: 2527 : 16 = 157 reszta 15 czyli F \uparrow 157 : 16 = 9 reszta 13 czyli D \uparrow 9 : 16 = 0 reszta 9 \uparrow Cześć ułamkową 0,78125 mnożysz...
No właśnie a co zrobić gdy trzeba przekonwertować liczbę zmiennoprzecinkową na tablicę cyfr(i znaków jak np "-" czy ".")??? Już nie jest tak łatwo dzielić przez 10 bo jest jeszcze część po przecinku... i jak teraz zaindeksować tablicę żeby sie cyferki odpowiednio ułożyły. Najlepiej było by chyba zrobić to wywołując jakąś funkcję przez rekurencję. Próbowałem...
Zamienienie zmiennoprzecinkowej(float) na stałoprzecinkową(nie ma takiego typu, ale można użyć dwóch uint8_t jeden jako "przed przecinkiem" drugi jako "po") na pewno spowoduje znaczne zmniejszenie się aplikacji. Oraz trzeba usunąć dzielenie, bardzo często można je zamienić przesuwaniem bitów.
Do dzielenia liczb w asemblerze bez znaku służy komenda div lub idiv . Formaty DIV reg DIV mem Dzielna musi być w AX lub DX:AX lub EDX:EAX. Dla AX wynik jest w AL a reszta w AH (operandy 8bit) Dla DX:AX wynik w AX reszta DX (operandy 16 bit) Dla EDX:EAX wynik w EAX reszta w EDX (operandy 32 bit) Do dzielenia ze znakiem służy idiv Jak chcesz się bawić...
Ze wszystkim sobie poradziłem, obecnie mam problem z liczbami nie całkowitymi. AVR Studio + WinAVR np mam zmienną x = 10 teraz chce zapisać w zmiennej y = x/4 Wynik to oczywiście 2,5 ale jak wykonać takie dzielenie? Takie coś nie działa: unsigned int x=10; float y y = x/4; Operacja po prawej z racji "całkowitości" obu operandów dzielenia zostanie wykonana...
Więc tak potrzebuje wyświetlić liczbę w formacie x.x. I nie wiem jak to zrobić próbowałem tak iż daną liczbę mnożyłem razy dziesięć zaokrąglałem do liczby całkowitej funkcją round a następnie robiłem dzieliłem na dziesięć ale na wyświetlaczu lcd i tak pojawiało mi się kupę liczb po przecinku w formacie x.x00000001 lub podobne x.x999999991. Jak to zrobić...
x/y jest obliczane na liczbach typu integer, a wynik "obcinany", stąd Twoje problemy. Spróbuj tak: int n = (x*256+255)/y; Nie jest to dokładnie to samo ;) ale za to nie używasz liczb zmiennoprzecinkowych. Alternatywnie przed dzieleniem konwertuj x na float. Pozdrawiam, Dr.Vee
Informacje o zmianach dostępne są po zainstalowaniu: Below is just a sample of what's new. Added support for these devices: AT90PWM216 AT90PWM316 ATtiny43U ATtiny48 ATtiny88 AT90PWM2B AT90PWM3B ATmega48P ATmega88P ATmega168P ATmega328P ATmega1284P ATmega32HVB Binutils 2.18 New version. GCC 4.2.2 New version. avr-libc HEAD (Future 1.6.0) New version....
Jeżeli w sterowniku masz liczbę całkowitą to zamiana na liczbę zmiennoprzecinkową nic ci nie da bo zamiast 20 otrzymasz 20,0 a z 21 otrzymasz 21,0. Co to za poprawa ? Chyba że dla 21 ktoś w sterowniku wpisał 210 a dla 21,5 wpisał 215. Wtedy na SCADZIE albo przesuwasz przecinek albo zamieniasz na float i dzielisz przez 10. Chyba że źle ciebie rozumiem...
Takie głupie pytanie: jakiego typu jest v_temp? Przy obliczeniach jest automatyczne rzutowanie na float i spowrotem do całkowitych po obliczeniach? Co do przesuwania wyników to już ktoś wcześniej zwracał uwagę że indeksy tablicy lecą od 0 a nie od 1 i tymczasem tylko to mogę podejrzewać. Wyświetlanie liczb z przecinkiem można zrobić prosto, nawet na...
jak najprościej wykonać obliczenie zmiennoprzecinkowe (z dzieleniem) na liczbach uint8_t, tak aby wynikiem także była liczba uint8_t? Wcale nie musisz wykonywać dzielenia na zmiennoprzecinkowych :wink: wystarczy że zrobisz np: tak: uint8_t a; uint16_t b; b=(20*10)/3; b*=10; a = b/10; Zasada jest taka żeby "przesunąć" przecinek z ilorazu w prawo...
Gdzieś wyczytałem że zapis Ex.x nie jest możliwy w FX2 w dół, czyli dopiero od FX3. W żaden sposób nie ma możliwości wpisania stałej czy to w postaci np. E2.2. czy 2.2. Próbowałem stworzyć stałą lokalną i nadać jej wartość początkową ale gdy się obserwuje program online to ma ona wartość 0. Na tą chwilę wyliczam wartość używając instrukcji DEDIV dzieląc...
Witam Bardzo dziękuję za pomoc oaz ten program. Jedyne czego nie rozumiem w programie Kolegi, to zasady działania polecenia Shift. Z tego co zrozumiałem, to chodzi o przesuwanie bitów zmiennej, czyli umożliwia to de facto dzielenie lub możenie liczby. A co w przypadku, gdy chcę pomnożyć moją liczbę np przez 0.74, w tym wypadku byłby to zapis: [syntax=vbnet]Liczba...
Prosto i jasno napisane, pytanie bardziej do działu Programowanie Początkujący. 14,5 zapiszemy jako: mantysa * 2^wykładnik (nadmiar 127) 1) liczba jest dodatnia - pierwszy bit (znak) = 0 2) szukamy wykładnika (2^w), sprawdzając kolejne w w = 1 -> 2^w = 2 -> niedomiar w = 2 -> 2^w = 4 -> niedomiar w = 3 -> 2^w = 8 -> niedomiar w = 4...
Mam pytanko oto część programu z postu Odczyt = 1wread(2) T = Odczyt - 16 T = T * 10 T = T \ 16 T = T \ 10 Możecie mi powiedzieć dlaczego najpierw mnożycie przez 10 potem dzielicie przez 16 i dalej dzielicie przez 10 ( czyli 10*16/10=16). Nie lepiej tylko podzielić przez 16. I jeszcze jedno pytanie dotyczące liczb ujemnych Ds przedstawia liczby ujemne...
A o czym rozmawiamy? Sygnał wyjściowy z dzielniko-prostowniko-integratora podajesz na wejście analogowe mikroklocka, a wszelki operacje arytmetyczne realizujesz w programie. Wyświetlacz LCD zazwyczaj też podłącza się do mikrokontrolera... ;-) Jak zrobisz w/g schematu to weź pod uwagę: - rezystancja wejściowa dzielnika - moc rezystorów - rezystancja...
Witam Nigdy nie działałem za zmiennym przecinku, ale teraz muszę policzyć nie za ciekawy wzór i muszę to zrobić na typie Double Mam funkcję double fp_calc(void) { double fp; double HUMI=55; double TEMP=293.15; fp=((272.186*log(HUMI/100...
Obawiam się, że AT90S2313 nie jest tak ambitny jak Ty. Aby wyświetlić temperaturę z dokładnością do 0,1'C z DS 1820 trzeba przeprowadzić kilka obliczeń na odczytanych z czujnika bajtach 7 i 8 (a nie tylko na 1 i 2). Wymaga to operacji na liczbach zmiennoprzecinkowych (chyba, że ktoś się zaweźmie i spróbuje zrobić to na typie Integer). Takie kombinacje...
nie wiem co masz na myśli że podając km to zapisuje się w zmienną w metrach Chodzi o to, że zapis zmiennoprzecinkowy ma swoje problemy (przykładowo, float 0.1 + float 0.2 nie jest równy float 0.3). W takich małych układach jest przede wszystkim bardzo kosztowny (obliczeniowo) - a przy tym zupełnie zbędny. Bo nigdy nie osiągniesz precyzji 0.0000001...
Żeby było przydatne, powinien dzielić, mnożyć, potęgować liczby zespolone, przeliczać je z postaci wykładniczej (kąty w ° i rad) na algebraiczną i z powrotem, i umożliwiać obliczenia w notacji wykładniczej. To i tak znacznie mniej, niż możliwości tak mocnego mikrokontrolera, i to jeszcze z gotowym wyświetlaczem alfanumerycznym. Program wygląda mi na...
witam z tego co ja wiem to liczby fibonacciego są liczbami naturalnymi, a Ty używasz zmiennoprzecinkowych. Może nie znam tej odmiany ( wiem o liczbach fibonacciego np w biznesie gdzie otrzymaną liczbę dzielimy przez poprzednią albo następną i otrzymujemy oscylacje wokół liczb bodajże 0.628 i 1.618 które wyznaczają jakieś tam granice przy obliczeniach...
atmega zmiennoprzecinkowy zmiennoprzecinkowy chara bascom zmiennoprzecinkowy
dobór zamiennik generator funkcyjny aplikacja zasada działania pralki bosch
zmywarka electrolux klapa schemat skutera elektrycznego
Wózek widłowy odpala, ale nie jedzie i brak hydrauliki - diagnostyka i przyczyny Jak sprawdzić temperaturę silnika w Renault Trafic 2020?