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...
Ja bym powiedział, że potrzebujesz zmienić program na nieużywający liczb zmiennoprzecinkowych... a już dzielenia na tych liczbach w ogóle:>
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
zawsze mozesz scastowac... jak kolega wyzej napisal ktoras ze zmiennych jest calkowita i sta niepoprawne dzielenie...
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...
Bardzo ciekawe testy, Risc V mocniejszy niż RP2040 poza dzieleniem zmiennoprzecinkowych, Cortex M33 mocniejszy od Risc V poza dodawaniem i mnożeniem int, ESP32(at)240MHz słabszy od Cortex M33(at)150MHz.
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?
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.
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?
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.
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...
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...
Witam Poszukuje schematow na bramkach logicznych realizujących dodawanie, odejmowanie, mnożenie, dzielenie na liczbach zmiennoprzecinkowych (format obojętny). Z góry dziekuje.
Tak jak napisał Kolek-są zoptymalizowane do cyfrowego przetwarzania czyli dużo szybciej wykonują mnożenia i dzielenia zmiennoprzecinkowe.
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. :)
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
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...
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ć...
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....
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...
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...
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.
#include <iostream> #include <conio.h> using namespace std; int dzialanie(int a,int b,int dzial);//1,1 float dzalanie (float a,float b,float dzial);//1/2 int main(){ int a,b; int dzial; //float(1/2) -operator dzielenia // double lub float cout <<endl<<"Podaj 2 liczby(liczba(np.1)[Ente...
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...
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!!
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...
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.
Obawiam się, że ATtiny2313 może mieć za mało pamięci do obliczeń na liczbach zmiennoprzecinkowych...
Tablicę masz typu Integer, a dzieląc przez 2 wykonujesz operację zmiennoprzecinkową. Uzyj dzielenia stałoprzecinkowego (div) lub zaokrąglij wynik (Round).
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.
Niestety o ile dobrze kojaże, w C mamy do dyspozycji tylko dwa typy zmiennych dla liczb zmiennoprzecinkowych - wspomniany float oraz double (8 bajtów, 15 miejsc po przecinku), w razie w long double, ale to nie to czego szukasz. Tak więc prostszego od float typu nie znajdziesz. Natomiast istnieje kilka innych rozwiązań dla liczb zmiennoprzecinkowych,...
Powinieneś dokonać konwersji z liczby zmiennoprzecinkowej do Stringa skoro wykonujesz dzielenie. np. FloatToStr
Podsyłam Ci to co mi kompilator zrobił z dzielenia dwóch liczb zmiennoprzecinkowych. Mozesz sobie to jakimś symulatorem przeanalizować.
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...
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; :)
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ż...
Użyj języka wysokiego poziomu (C lub Bascom), wtedy nie będziesz miał problemów z arytmetyką zmiennoprzecinkową.
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ą?) :)
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
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...
Co to za studia kończysz, chyba nie techniczne? W takiej sytuacji do przechowywania temperatur użyj najnormalniej w świecie typ int (int16_t / uint16_t w zależności od zakresu temperatur). Jeśli rozdzielczość odczytów masz 0,1C to przechowuj wartość dziesięciokrotnie większą pamiętając, gdzie jest przecinek. Na przykład dla 20,8C przechowujesz 208....
Musisz tylko użyć zmiennych zmiennoprzecinkowych (signle, real, double, extended)
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.
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.
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.
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ę...
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:...
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...
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/...
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...
Oczywiście, że nie należy popadać w paranoję i optymalizować każdej jednej linijki kodu. Jednak w częściach krytycznych co do czasu wykonywania należy przeprowadzać - a nic nie stoi na przeszkodzie pozostawiać w komentarzu opis działania. No i czasami nie zawsze mniej kodu = szybciej. np: var Zoom: Byte; function ScreenToPoint(Point: TPoint):...
Funkcja _W_ mainie? Od kiedy w C funkcje daje się wewnątrz innych funkcji? Pomijam aspekt semantycznej poprawności, chodzi mi tylko faktycznej użyteczności takiej konstrukcji. Taka funkcja musi być "gdzieś" - jest to generalnie całkowicie nieistotne w którym pliku i w którym jego miejscu ta funkcja będzie. Co do funkcji, to zostanie ona wywołana za...
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);...
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...
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....
Witam. Na PIC'a (32MX) to mi się nie chce patrzeć ale zerknij tu: https://en.wikipedia.org/wiki/ARM_Cortex... do tabelki ARM Cortex-M instruction variations. Na poprawę szybkości działania programu to proponuję lepiej napisać program lub zmienić procka na wydajniejszego. Zrób test : na obu prockach zmierz czas wykonania miliona dzieleń / mnożeń liczb...
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.
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ć.
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.
A po co to rozbijać na dwie operacje? 15 / 4 * 25 == 15 * 25 / 4 = 93.75 - no i już wychodzi tyle samo co przy liczbach zmiennoprzecinkowych. Zaokrąglanie? Przecież to jest tak samo możliwe przy całkowitych jak przy zmiennoprzecinkowych. Co więcej - robi się to dokładnie tak samo - do licznika dzielenia dodajesz połowę mianownika PRZED dzieleniem i...
Funkcja ta sprawdza wartości zmiennoprzecinkowe. Liczby zmiennoprzecinkowe zgodnie ze standardem IEE reprezentowane są w formie mantysa + cecha, sposób ten ma określone ograniczenia i zasady na prezentowanie określonych liczb. Funkcja o którą pytasz służy do sprawdzenia "w jakim zakresie" jest dana liczba i zwraca odpowiednie wartości: 0 Liczba w zakresie...
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...
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...
A znalazles?? Bo przypomnialo mi sie jeszcze, ze na www.microchip.com sa gdzies opisane rozne rozwiazania mnozenia, dzielenia oraz operacji na liczbach zmiennoprzecinkowych. PIC'e 16 mnozyc nie potrafia, takze czasem jest fajna zabawa jak trzeba pomnozyc liczbe 3bajty*liczba 3 bajty :-) Pozdrawiam kubagert
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...
Według mnie jest jedna prosta regóła: - Jeśli w gre whodzi szybkość np jeśli program musi hodzić błyskawicznie to polecam assembler który pozwala budowanie z takich 'pojedyńczych cegiełek'... - Jeśli zaś w gre whodzi efektywność to lepiej jest użyć języków wysoko-poziomowyh.. takih jak C... pozwala on używanie z takich jusz gotowyh 'prefabrykowanyh'...
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...
Co do dzielenia, it's not a bug, it's a feature! :) Po naszemu, to nie ograniczenie, tylko odgórne założenie, dzięki temu w C nie ma dwóch operatorów dzielenia (całkowite i zmiennoprzecinkowe), jak w niektórych innych językach, ale trzeba uważać na typy zmiennych, coś za coś. Według tego, co wyczytałem z dokumentacji avr-libc int zajmuje 2 bajty, a...
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...
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...
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...
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...
Witaj podpowiem Ci tylko jak obejść floata dwoma np. intami. W prockach powołanie floata dużo flasha kosztuje i może czasem warto go zastąpić. Niestety są niektóre obliczenia że musisz skorzystać z floata czy double ale to inna bajka. Robisz tak w przypadku 12,36 który był wynikiem działania jakiegoś dzielenia dajmy na to powołujesz 2 zmienne uint calkowite...
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ć...
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...
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...
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...
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...
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)...
Brawo za to, że dzielisz się tym co napisałeś. Ale niestety to przykład jak robić grafikę wolno. Użycie liczb zmiennoprzecinkowych, dzielenia, mnożenia nie wspominając o trygonometrii to podstawowe błędy. Tutaj przykładowo kod rysowania linii bez float, mnożenia i dzielenia. Używane są dane typu int, bo funkcja pracowała na 32 bitowym ARM, ale możesz...
w zasadzie masz rację,z tym dzieleniem,tylko że zrobi sie liczba zmiennoprzecinkowa i ją tez trzeba jakoś obrobić. Ale jeszce cos mi zaświtało,a wcześniej nato nie wpadłem-jeżeli przełącze organizację w EEPROMIE z 8 na 16 bitową to będę mógł zapisać liczbę 4 lub 5-ciocyfrową bez problemu. To będzie najlepsze rozwiazanie chyba ,bo bez żadnych dodatkowych...
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.
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...
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...
Janie ... Ja tylko poprawiłem program żeby się kompilował bez błędów ale dziękuje za zauważenie mojego błędu przy dzieleniu rzeczywiście co najmniej jeden element powinien być zmiennoprzecinkowy, pośpieszyłem się z poprawianiem. A co do zadania powinno być dokładniej, bez żadnych kombinacji (dla x<=2): [syntax=c] wynik= sin(exp(x))*sin(exp(x));...
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...
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...
zamiast float uzywaj double - podwojna precyzja A co do mozliwego zapisu liczb, to float/double umozliwia zapisanie wiekszej/mniejszej liczby niz int, tyle tylko, ze przy tak duzych liczbach zacznie wprowadzac drobne bledy w obliczenia. "i chciałem żeby powieściła jak największe wartości." A jak sie przez moment zastanowisz, to twoj sposob myslenia...
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...
Rozważam jak na małych architekturach fajnie mnożyć integery przez współczynniki jak 1.3, 1.5 ... oraz 0.9 , 0.7 ... Cel: w wielu zastosowaniach "na styku z człowiekiem' trzeba się dostosować do logarytmicznego naszego postrzegania rzeczywistości. Czyli postrzegane jako równe skoki głośności, tonu (częstotliwości) tak naprawdę muszą być wykładnicze....
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.......
Pytanie czy na pewno potrzebna Ci jest arytmetyka zmiennoprzecinkowa ? Czy może da się wszystkie obliczenia zrobić na liczbach całkowitych 100 razy większych używając typu long int ? Dopiero podczas wyświetlania wstawiając odpowiednio przecinek poprzez wyświetlenie części całkowitej z dzielenia zmiennej przez 100 wstawienie przecinka i wyświetlenie...
rzeczywiście, pomogło dla kwarcu 11,059 ale dla innnych to się jakoś tam chyba liczyło doszedłem doświadczalnie, ze przy 8MHz do TH0 wpisuję 247. jout22 - a co innego mogę urzyć zapiast printf? potrzebóję wyświetlić liczbę zmiennoprzecinkową - wyświetlać cyfry takiej zmiennej po kolei to horror. (mnustwo dzieleń i mnożen 32bit) a co do kodu - ok 0,5kB...
Może jednak zdradzisz mi te niespodzianki? Zaoszczędził byś mi sporo pracy. Teraz tak z rękawa nie posypie, hmm... przykładowo Do...Loop jest mniejsze niż while...wend. Generalnie chodzi o zastępowanie, niektórych instrukcji BASCOM'owych własnymi rozłożonymi na części pierwsze warunkami. O działaniach na liczbach zmiennoprzecinkowych już nie wspomnę,...
atmega zmiennoprzecinkowy bascom zmiennoprzecinkowy procesor zmiennoprzecinkowy
falujące niskie obroty kosiarka siemens micromaster termopara przewody
Jak podłączyć subwoofer do radia Vordon 8290 Jaki laser do Technics SL-P990? Model SOAD60A