Generacja natywnego kodu HDL dla operacji zmiennorzecinkowych pozwala na implementację tego rodzaju operacji na sprzęcie z wykorzystaniem VHDLa lub Veriloga. Wszystko to bez mozolnej i trudnej konwersji na liczby stałoprzecinkowe. Dane zmiennoprzecinkowe to preferowany typ zmiennych, w aplikacjach modelowania i symulacji, gdzie liczy się wysoka dokładność...
Zakładam, że rysujesz figury przy użyciu Canvas, tekst rysuje się za pomocą funkcji TextOutA , a za zamianę liczb na string odpowiada IntToStr (liczby całkowite) albo FloatToStr (liczby zmiennoprzecinkowe). Reasumując: Canvas->TextOutA(10, 10, IntToStr(123));
Chodzi o sterowanie silnikami 3 fazowymi. Znalazłem STM32G431KB. On chyba też wspiera sprzętowo liczby zmiennoprzecinkowe.
Tak liczby są z zakresu 0-1. 1 spacja jest pomiędzy liczbami. Aha już widzę błąd tab mam jako int a powinno byc jako zmiennoprzecinkowe. No ale to i tak nie wiem jak to zrobić. 7 to zarówno liczba wierszy i kolumn. No i niekażda cyfra jest osobną liczbą np. tab[0][0]=0, tab[0][4]=0.5 Tak to powinno wyglądać.
W tym przypadku masz możliwość użycia funkcji matematycznych ceil(), floor(), round(). Ciebie zapewne interesują tylko dwie pierwsze ale opiszę działanie każdej z nich: ceil() - zaokrągla liczbę zmiennoprzecinkową do najbliższej większej liczby całkowitej (czyli w górę) floor() - ceil() - zaokrągla liczbę zmiennoprzecinkową do najbliższej mniejszej...
Co mogę źle robić? Przede wszystkim to w ogóle zrezygnować z obliczeń na liczbach zmiennoprzecinkowych w takim prostym przypadku. Toż to aż woła o pomstę do nieba ;) żeby katować się tu z czymś takim. Poza tym ten kto pisał ten kod nawet nie zdaje sobie sprawy że w C dla AVR nie ma prawdziwego typu double ;) a takiego użył dla zmiennej temp. Została...
Witam! Podaję Ci zmodyfikowany nieco programik. Dodano po 11 Witam! ad Twój dodatek: Po pierwsze, lepiej liczbom zmiennoprzecinkowym nadawać typ double zamiast float, bo typ float zawsze jest awansowany niejawnie do typu double, podobnie jak typ char i short do typu int. Ale idziemy dalej. w wierszu: [syntax=c]srednia = suma / ilosc;[/syntax]suma i...
Pierwszy problem: Zdecydowana większość operacji na liczbach zmiennoprzecinkowych wprowadzi Ci błąd, który będzie się kumulował. Mnożenie przez 10 zawsze będzie powodować rozszerzenie mantysy (w sensie odległości pomiędzy pierwszą a ostatnią jedynką) - w którymś momencie musi pojawić się cięcie (utrata bitów). Pierwszy pomysł, to dodać z samego początku...
format liczby typu IEEE float (tzw. real*4 format): SXXXXXXX XMMMMMMM MMMMMMMM MMMMMMMM gdzie S - znak, X - wykładnik, M - mantysa S=0 - znak dodatni S=1 - znak ujemny mantysa jest to stałoprzecinkowa część ułamkowa liczby x=1.MMMMMMMMMMMMMMMMMMMMMMM wykładnik to stałoprzecinkowa liczba: y = XXXXXXXX - 127 wartość liczby to: z = (-1)^S * x * 2^(y) Mam...
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,...
Witam szanownych forumowiczów. Napotkałem na pewien problem który szczerze powiedziawszy nie wiem jak ugryźć. Potrzebuję zapisywać do pamięci liczby zmiennoprzecinkowe o zmniejszonej precyzji (half_float-16 bit). Liczba koniecznie musi mieścić się na 16bitach. Czy ktoś spotkał się może z funkcjami realizującymi np. konwersję float->half-float? Nie...
Do prostych operacji, zwłaszcza mnożenia, dzielenia, dodawania i odejmowania polecałbym jakiś format stałoprzecinkowy, nowa avr-libc ma może i szybkie, ale za to strasznie "rozdęte" procedury obliczeń zmiennoprzecinkowych. Ich rozmiar jest wręcz paskudny. Przykład, kod z mnożeniem, dzieleniem, dodawaniem i odejmowaniem zmiennoprzecinkowym w poprzedniej...
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...
Mam takie zadanko do rozgryzienia: W pewnej jednostce arytmetyczno-logicznej liczby rzeczywiste są przetwarzane z zastosowaniem zmiennoprzecinkowego zapisu binarnego w rejestrach 8bitowych, z przeznaczeniem po 4 bitów na cechę (ze znakiem) i mantysę (ze znakiem). Wykonaj na tej jednostnce działanie: z=(y -(x+y))/x x=(-0.2) 10 , y=(3.24) 10 Dodatkowo...
Taki termometr można zrobić na ATTINY2323 :) A jeżeli chcesz zrobić konwersją prosto i łatwo do wytłumaczenia to robisz tak: Odejmujesz setki, dodając jednocześnie po jeden do innej zmiennej do czasu aż liczba będzie mniejsza niż 100 i otrzymujemy ilość setek. Tak samo liczymy diesiątki i zostaje nam liczba mniejsza niż 10, czyli liczba jedności. Koniec...
Czyli sugerujesz wielokrotne losowanie całej tablicy, do momentu trafienia zestawu danych spełniających warunek sumy równej pewnej wartości? Wygenerowane w ten sposób dane, rzeczywiście byłyby całkowicie losowe, ale o ile dla małych tablic i zakresów i liczb całkowitych to jeszcze mogłoby działać, ale dla większych tablic, lub liczb zmiennoprzecinkowych...
Witam! Mam następujący problem: mam urządzenie, które pewne dane wysyła w postaci szeregowej. Liczby zmiennoprzecinkowe wysyłane są zgodnie ze standardem IEEE754 (64 bity). Ja te dane mam zapisane w pliku, teraz muszę je przerobić na postać zrozumiałą dla mnie:). Napisałem funkcję w C++, która jako parametr dostaje tablicę 8-bajtową z liczbą zapisaną...
na zapis szesnastkowy typowo mozna przekonwertowac tylko liczby calkowite. (...) Oczywiscie mozna by teoretycznie zdefiniowac zapis przecinkowy dla innej reprzentacji liczb niz dziesietna ale jakos matematyka tego nie przewidziala Jak to nie? Tak samo jak w dziesiętnym! na przyklad 987.56 10^-1 + 6* 10^-2 Tak samo w szesnastkowym. dead.beef = d*16^3...
Wz = 31,5-((255-n)/2) wystarczy pomnożyć przez 10 10Wz = 315 - ((255-n)*5) Teraz masz już całkowite. Przecinek wstawiasz podczas wyświetlania na LCD. Ustawiasz kursor na pozycji drugiej, wyświetlasz liczbę - w twoim przypadku 10x większą. Teraz dzielisz liczbę przez 10 tak aby wynik zawierał liczbę pełnych dziesiątek (bez części ułamkowej), ustawiasz...
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...
Witam. Dostalem sie do grupy seminaryjnej o nieszczesliwej jak dla mnie tematyce. Za zadanie mam do zrobienia " implementacja prostego algorytmu mnożenia liczb stałoprzecinkowych z wykorzystaniem sumatorów. Uruchomienie i przetestowanie układu w trybie symulacyjnym a następnie na platformie sprzętowej z wykorzystaniem układów Virtex firmy Xilinx ......
Może troszkę więcej o tym opowiem: Otóż mówiąc "błąd" chodziło mi o błąd "windowsowski" z dostępnymi opcjami: debuguj, zakończ nie wysyłając raportu... o sygnaturze: AppName: zaprzyjaznione.exe AppVer: 0.0.0.0 ModName: zaprzyjaznione.exe ModVer: 0.0.0.0 Offset: 00001434 ale to jest i tak nie ważne, a przynajmniej tak mi się wydaje. Jeżeli chodzi o określanie...
A sprawdź jaki będzie wynik odejmowania tych dwóch prawie równych liczb, jeśli nie zero, to w takim razie to jest problem "standardowy" z liczbami zmiennoprzecinkowymi polegający na niejednoznaczności liczby i nieciągłości zbioru. Tak na szybko znalazłem taki tekst
Jak wygląda zaokrąglanie liczby zmiennoprzecinkowej np w kodzie ieee754 ? Np jeśli mamy ułamek 0.1 który ma nieskończone okresowe rozwiniecie w systemie dwojkowym a ja muszę zapisać go na skończonej liczbie bitów , to poprostu go ucinam czy musze zachować jakieś zaokrąglanie ? Interesuje mnie jak to się odbywa na najniższym poziomie , podejrzewam ze...
O ile pamiętam, cin czyta do pierwszego znaku nadającego się do potraktowania jako część liczby całkowitej, gdy piszesz "int n << cin". Oznacza to, że po podaniu "1.5" cin zużyje "1", a ".5" pozostanie w buforze. Gdybyś próbował, bez wyczyszczenia bufora, odczytać kolejną liczbę całkowitą, otrzymałbyś zero, bo konwersja próbowałaby zacząć się...
Poniższe rozwiązanie jest proste i skuteczne dla każdego rozkładu: Jeśli masz generator liczb o rozkładzie jednostajnym na odcinku W praktyce owe `rzutowanie` i określanie to nic innego, jak policzenie G(Y) gdzie G to funkcja odwrotna do dystrybuanty rozkładu normalnego. 1. Ponieważ funkcja G dla rozkładu normalnego nie jest elementarna, to należy ją...
Witam ponownie. Ciągnę wątek zamiany bin na BCD, głównie po to aby się czegoś nauczyć, bo program w zasadzie jest skończony i działa zgodnie z oczekiwaniami (obsługa generatora). Jak skończę całość to temat pewnie pojawi się na Elektrodzie w DIY. Sprawdziłem pracę kodu wyświetlającego dane na sześciu wyświetlaczach siedmio-segmentowych i w każdym przypadku...
Witam. Odpaliłem właśnie bibliotekę freemodbus na avr i potrzebuje informacji w jaki sposób zapisać w rejestrach Read Holding registers liczbę float. Rejestry Read Holding registers w tej bibliotece są uint32_t. Ogólnie w programie działam na liczbach całkowitych. Przykładowo mam taką wartość rzeczywistą pewnej zmiennej (5,25) to mnożę ją razy 100 i...
Liczba: 8002930403 ma 10 cyfr, wiec raczej będziesz potrzebował bufora znaków (char *) o długości o jeden większego, by na ostatnim miejscu umieścić 0. Jednak liczba 20 000 000 000 ma 11 cyfr, więc buffor możesz odrazy zrobić na 12 znaków. Następnie możliwe że tracisz dokładność w wyniku działania tych trzech operacji: (12000000000/4095)*data.ctrl....
Witam ! float liczba=0; while(1) liczba+=(143/100); przyrost jest o 1 a nie jakby można się spodziewac o 1,43 czemu tak jest ? i co zrobiłem żle?[/quote] Może: liczba+=(143/100.0); ? P.J
Heh ze mną to już tak jest że jak siąde i pomyśle to zrobie! ;) Poradziłem sobie! Muszę zaznaczyć że funkcja ta potrzebna mi była do wysyłania liczby na wyświetlacz LCD. Gdy już napisałem funkcję stwierdziłem, że nie koniecznie musi ona wstawiać tą liczbę do tablicy znakowej i dopiero wysyłać, tym bardziej że tablica mimo że była tworzona za każdym...
Troche przykrótkie te liczby zmiennoprzecinkowe.
skoro Reaper82 pisze w C, to cu mu sugerujecie bascom. Zgodzę się z tym, że ta funkcja zjada dużo pamięci, ale jesli jest wykorzystywana kilka razy kolejene przywołania nie sa już tak straszne. Mam ATMega32 i sprintf uzywane jest tam kilkadziesiąt razy i jakos mi nie brakó miejsca. Jak komuś zależy na pamięci to nie pisze ani w c ani w bascomie. Pozostaje...
Oczywiście po dokładnym sprawdzeniu funkcja pow() nie działa bo daje jako wyjście liczbę naturalną... Nie do konca sie z tym zgadzam :) Funckja pow() operuje na liczbach typu float wiec wynikiem moze byc tez liczba zmiennoprzecinkowa. Testowalem ta funkcje i jako wynik otrzymywalem takze liczby z ulamkiem.
Witam! Uruchamiam na ARM'ie Atmela program w którym wykonuje różne operacje na liczbach zmiennoprzecinkowych. Problem w tym ze program wyklada sie przy takiej instrukcji a=32000; prob[i]*=a; Dla tak na oko mniejszych od 1000 przechodzi ta linijke, ale dla wiekszych wartosci tej liczby wywala sie. prob jest tablica floag, a natomiast jest typu int. Co...
Witam. W prawie całym programie używam zmiennych 8bit (uint8_t), ale w jednym miejscu jestem zmuszony do obliczeń zmiennoprzecinkowych. Mam pytanie: jak najprościej wykonać obliczenie zmiennoprzecinkowe (z dzieleniem) na liczbach uint8_t, tak aby wynikiem także była liczba uint8_t? Gdy wykonam zapis np.: uint8_t a; a=10*(20/3); to w wyniku dostanę liczbę...
Tak, teraz działa, wyrzuca wynik 65535, ja zrobiłem w pętli coś takiego: [syntax=pascal]VAR a:integer; BEGIN clrscr; FOR a:=1 TO 32767 DO BEGIN writeln(a); END; writeln('Max liczba to ' , a ); readln; END.[/syntax] tylko to mi przelatuje wszystkie liczby zatrzymuje się na końcu,a to co mi podałeś jest lepsze, właściwie tak to powinno być. Dzięki za...
Po prostu jak widzę nie rozróżniasz stałych dosłownych które mogą być: 1. liczbami całkowitymi 2 liczbami zmiennoprzecinkowymi 3. literałami czyli łańcuchami danych skoro definiujesz ją tak: #define Stala1 290 to chyba sam widzisz, że to podpada pod pkt.1 wyżej ;) Masz więc dwa wyjścia albo zdefiniować ją jako stałą dosłowną literał #define Stala1 "290"...
Zapoznam sie z materiałami, a zakres liczb od ułamków groszy to setek milionów złotych. Są to operacje finansowe, więc liczby zmiennoprzecinkowe odpadają.
Ciekawe. Bez użycia debuggera mogę powiedzieć tylko, że problem na pewno wynika z wykorzystania liczb zmiennoprzecinkowych do obliczeń (i wynikających z tego błędów zaokrągleń) w tej linijce: [syntax=cpp] su=su+pow(10,n-i)*(a%10); //wyznaczoną cyfrę mnożę przez odpowiednią potęgę liczby 10, aby zmienić jej pozycję w liczbie.[/syntax] Natomiast dlaczego...
Jeśli dobrze rozumiem, to dal przejrzystości i jasności kody, jeżeli spodziewam się liczby ujemnej w wyniku to lepiej jest ją zdefiniować jako zmienną typu "int" i pilnować, aby wynik zmieścił się zakresie tej zmiennej (np. dla int8 od -127 do 127). Zgadza się? Nie, tak nie jest lepiej. Zmienna ma być takiego typu aby pasował do przechowywanych w niej...
Na tej stronie gościu pisze jak zrobić obsługę liczb zmiennoprzecinkowych w 8051. Po angielsku, ale pisane dość przyjaźnie. Zwróć uwagę na procedurę mul32.asm. Pozdrawiam.
musisz odnalezc adres tej zmiennej i wyslac do EEPROM'a 4 kolejne bajty poczawszy od w/w adresu. nie mam pojecia jak to zrobic w Bascomie poniewaz nigdy w nim nie pisalem. w kazdym razie w C i asmie jest to jak najbardziej wykonalne. nie interesuje cie wogole jak ta liczba wyglada i jaka jest jej wartosc. wiesz ze znajduje sie pod adresem X i ma 4 bajty....
nie znam się na VHDL-u, ale przypuszczam, że potrafi on robić operacje bitowe na zmiennym (co nie jest oczywiste, bo C tego nie potrafi na typie zmiennoprzecinkowym). Wystarczy zamaskować odpowiednie bity liczby i przesunąć o odpowiednią liczbę pozycji w prawo. W ten sposób można uzyskać wszystkie "składowe" liczby zmiennoprzecinkowej.
Wszystko zależy od tego w jaki sposób zapisywane są liczby. Jeżeli jest to format stałoprzecinkowy, to rzecz jest banalna, trzeba zaliczać połowę trafień w obwód, a połowę odrzucać, czyli raz jeden, a raz drugi warunek. Format zmiennoprzecinkowy IEEE, to już bardziej skomplikowana zabawa. Rzecz polega na tym, że różnice między następną możliwą do zapisania...
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)...
Zamiast od razu równania daj zmienną: doube a=twoje równanie; cout<<a; Stosuj zmienne zmiennoprzecinkowe a nie całkowite. Oczywiście czasem można obejść problem mnożąc liczby zawczasu przez 1,0 ale po co?
znam, to, że będzie mniejsza dokładność niż 0,001 mi nie przeszkadza, ale tu pojawia się pytanie, czy i za pomocą jakich bibliotek można wykonywać działania na liczbach całkowitych, tak aby całość była syntezowalna, i czy jest gotowy sposób na przekonwertowanie integera w std_logic_vector. A może lepiej jednak zdecydować się na zapis zmiennoprzecinkowy...
Czym jest RESULT. RESULT w Delphi(czyli obiektowym pascalu) jest ukrytą zmienną w każdej funkcji. To, co przypisujemy do result, funkcja zwraca. Jeśli chodzi o zwykłego Pascala, rolę zmiennej result pełni nazwa funkcji, czyli: function suma(a, b: integer): integer; begin suma:=a+b; end; Za pomocą nazwy funkcji zwracamy jej wynik....
Ale pojawił się drugi problem w wyniku obliczeń wychodzi liczba: 0.020408093929290771484375 i teraz pytanie jak ją wyświetlić? Nie chce mi wyświetlać więcej niż 18 miejsc po przecinku, co jest dziwne przy long double, bo przecież liczba zapisana na 4 bajtach pozwala na przesunięcie przecinka o ile dobrze pamiętam maksymalnie 127 miejsc przecinka w...
Jest sporo takich bibliotek, musiałeś słabo szukać. Jeśli tylko całkowite to [url=]bigint, jeśli także zmiennoprzecinkowe to [url=]GMP (ale to już kombajn). Poza tym napisanie własnej implementacji operacji arytmetycznych na liczbach całkowitych jest trywialne.
Jest to kod z Pana Wiązani być może nieudolnie przerobiony. Oryginał ma tak: Dim licz_8ms As Byte Incr Licz_8ms If Licz_8ms = 125 Then ............. I to działa, czyli ja nie mogę używać liczby stałoprzecinkowej . No dokładnie. To działa tylko dla Byte (i podobnych). Chociaż typ danych Single mówi, iz może przyjmować wartości stało i zmiennoprzcinkowe....
Witam Mam mały problemik. Mam taki wzór: algorytm:integer; memo:integer; wynik:double; e wynik:=((memo*algorytm*1.9)+(memo*78)-(a... wynik to liczba zmiennoprzecinkowa wiec wynik jest po przecinku często. Wyswietlam to w ten sposób: Memo3.Lines.Add(floattostr(wynik)); ale wynik tego to jest kod i musi być 6 cyfrowy bez miejsc po przecinku...
A jaką wartość w kodzie binarnym ma przecinek ? Stosuje się następujące rozwiązania: - liczba stałoprzecinkowa: transmituje się tylko wartość. Urządzenie odczytujące samo wie gdzie ma być przecinek - zamiana cyfr i przecinka na znaki ascii - kodowanie zmiennoprzecinkowe (floating point)
Pewnie masz włączonego newlib-nano, w którym domyślnie funkcje typu *printf() nie obsługują liczb zmiennoprzecinkowych.
Ile razy na sekundę będziesz robił konwersję daty, że liczby zmiennoprzecinkowe są problemem? A może dałeś za mały mikrokontroler i szkoda FLASH na operacje zmiennoprzecinkowe?
Problem związany jest z konwersją float/double do AnsiString. Generalnie wykonuję to tak: [syntax=c]jakas_nazwa_obiektu->Caption = "Jakiś napis: " + jakas_nazwa_obiektu->Caption.FloatToStrF... ffExponent, 40, 1);[/syntax] Zgodnie z [url=]dokumentacją powinienem uzyskać 40 cyfr znaczących i przynajmniej jedną cyfrę wykładnika dla zapisu...
Serial.println(test.toFloat()); A jak jest reprezentowany typ Float? Zobacz w Wikipedii: [url=]Liczba zmiennoprzecinkowa#Implementacje sprzętowe. 40000001 używa 26 bitów.
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...
Witam chciałbym przyspieszyć działanie programu przez wyeliminowanie liczb zmiennoprzecinkowych jesli to bedzie możliwe, mam taki wzór który wylicza procent z dowolnej liczby od 0-100% wzór wygląda tak : wynik = (iczba_całkowita*ofset)+2000 gdzie ofset jest ułamkiem od 0 do 1 ze skokiem co 0.0007 czyli 819 pozycji (gdyby to miało jakieś znaczenie) ale...
Uzyj liczby typu long int, funkcji sprintf() i po sprawie. sprintf(buffer, "%ld", long_number); lcdxy(1,4); write_text(buffer); Oczywiscie buffer musi byc zdeklarowany odpowiednio duzy. BF sprintf jedną z najbardziej kosztownych funkcji. Nawet do kilku kB kodu (i RAM podczas pracy), Być może pociąga za sobą całą bibliotekę...
Problem nie polega na zapisie do pliku, tylko na tym, że obliczenia dokonujesz na typie double, który jest zmiennoprzecinkowy i ma wielkość 8 bajtow a zapis do pliku dokonujesz na typie char który ma wielkość 1 bajt i jest "bezprzecinokwy" Jest to błąd rzutowania double na char
To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą? No to w końcu chcesz mieć liczbę całkowitą w zmiennej zmiennoprzecinkowej czy liczbę całkowitą w zmiennej całkowitej? Jak to drugie, no to Round: Dim Co2_w As Single Dim Co2_int As Long ... Co2_int = Round(co2_w) Niezgodnie z Helpem BASCOMa,...
Musisz tylko użyć zmiennych zmiennoprzecinkowych (signle, real, double, extended)
ale spodziewałem się, że w obu przypadkach wartości będą identyczne. A niby czemu? Skąd domniemanie, że kompilator używa w obu wypadkach tej samej biblioteki zmiennoprzecinkowej? sdcc/device/lib/_fsadd.c - dla '51 sdcc/device/lib/z80/_fsadd.asm - dla z80 Albert Nawet przy różnych implementacjach obsługi liczb zmiennoprzecinkowych wydawać by się mogło,...
Ja już wcześniej pisałem, że nie programuję w C, więc nie polecę też niczego, niestety. O bibliotekach wspomniał coś (at)ble___ ale nie miałem okazji skorzystac z porady i zapoznac się z jakąś, choćby przez analizę kodu. Nie wiem jak to działa i z czym to sie je. Mam nadzieję, żę nie bedzie tak, że są takowe, ale nie nadają się do operacji na dużych...
W nie tak dawnych czasach wolnych MCU, arytmetyka zmiennoprzecinkowa zjadała cenne zasoby, albo jej nie było w prostszym PLC, więc float nie jest formatem od którego wszystko się zaczęło, tylko integer z mnożnikiem. Skalowanie banalne, uśrednianie także. Z nawyku stosuję po dziś dzień zamiast float i nie jest to jakieś odosobnione dziwactwo tylko nadal...
Są funkcje sscanf i sprintf; pytanie, co ma oznaczać zapis binarny - czy napis złożony z cyfr '0' i '1' (sprintf tego nie ma - trzeba by go zrobić ręcznie), czy postać, jaką mają zmienne używane przez program. A liczba może być reprezentowana jako całkowita 8-, 16-, 32-, albo 64 bitowa, albo jako zmiennoprzecinkowa 32-, 64-, albo 80-bitowa, i od tej...
Tutaj znajdziesz sporo na ten temat: Pozdrawiam
Chce wyswietlic na wyswietlaczu LCD liczbe zmiennoprzecinkowa a wyswietla mi jakies glupoty. To program: while(1) { StartADC(); pomiar=14.3; unsigned char width=4; dtostrf(pomiar,width,2,lcd_buf); write_text(lcd_buf); waitms(40); write_command(0x01); } Program zamiast 14,3 na wyswietlaczu pokazuje...
Shift pozwala szybko dzielić lub mnożyć tylko przez kolejne potęgi dwójki czyli, żeby się nie rozpisywać ograniczę się do bajtu :2,4,8,16,32,64,128 i 256 Ten Shift tam nie musi zostać. Umieściłem go tam bo liczba przez którą Ty dzieliłeś była potegą dwójki :D Shift Zmienna, Right, 1 ' podzieli ją przez dwa Sgift Zmienna, Right, 4 ' podzieli ją przez...
dokładnie potrzebuję mnożenie wykorzystać w programi mikroprocesora AT80C52. Zaszła konieczność wymnożenia kilku liczb(współczynników) Potrzebuje rozwiązania programowe ewntualnie algorytm. Z góry dziekuję za wszelką pomoc. ERA 600035828
Generalnie do zapisu liczb zmiennoprzecinkowych w maszynach cyfrowych używa się notacji zgodnie np. ze standardem IEEE754 - o tym właśnie mowa w linku q_bym, choć oficjalna nazwa tam chyba nie pada. P.
Obliczenia zmienoprzecinkowe są znormalizowane w normie ieee754. Na '51 bedziesz musiał sobie zasymulowac obliczenia zmiennoprzecinkowe software'owo. Do tego masz materiały wprowadzające: Natomiat w pentium jest specjalna jednostka (FPU) zajmująca się obliczeniami zmiennoprzecinkowymi, żeby jej używac trzeba wydawac polecenia dla tej jednostki. Wiecej...
Witam. musze stworzyc programik mnozacy 2 liczby zmiennoprzecinkowe podwojnej precyzji postaci n,mEk (n - l. calkowita ze znakiem, m - l. calkowita bez znaku, E - mala badz duza litera e, k - l. calkowita ze znakiem). poczytalem sobie ieee 754 ale prawde mowiac nie bardzo wiem jak to zastosowac w praktyce. problem zaczyna sie juz przy wczytywaniu liczb,...
Witam, Mam taki problem. Zastanawia mnie, dlaczego ten fragment kodu nie dziala poprawnie: unsigned char Line[17]; sprintf(Line, "%f", 234.0/212.0); LCD_Write(Line); Zwykle dzielenie floatow i wyswielenie ich na LCD [HD44780], za to wynik dziwny: na wyswietlaczu dostaje tylko jeden znak: '?' Pisze to pod ATMega8, wyswietlacz...
Witam wszystkich! Mam pytanie do wszystkich którzy mieli do czynienia z kompilatorem Ceibo. Czy ktoś z Was wyświetlał liczbę zmiennoprzecinkową na LCD za pomocą: sprintf (buffer, %f, x); write_text (buffer); U mnie wyświetla "<NO FLOAT>":!::?: Nie wiem co się dzieje. Pierwszy raz widzę coś takiego. Wyświetla wszystkie typy zmiennych tylko nie...
witam, mam problem z liczbami zmiennoprzecinkowymi, posluzylem sie wyszukiwarka i nic nie znalazlem, a zeby nie zakladac nowego tematu pisze tutaj. Chodzi mi o odejmowanie i mnozenie liczb zmiennoprzecinkowych. Dodawac potrafie, ale tych dwoch działan nie potrafie. Nie wiem co po kolei robic i co wogole robic. Moglby ktos mi ładnie opisac wszystkie...
Witam Serdecznie Mam takie pytanie , jak są zapisywane liczby zmiennoprzecinkowe 32 bitowe przesyłane za pomocą modbus. Jest to transmisja pomiędzy sterownikiem PLC LG a przetwornikiem firmy Lumel P12P. Mam liczbę zapisaną w dwóch rejestrach 16bitowy czy to co jest po przecinku jest zapisane w jednym rejestrze a część całkowita w drugim rejestrze ?...
Ja rozumiałbym to jako uproszczenie zadania. Czyli - pokaż część całkowitą liczby.
witam robisz tak: #include <math.h> i w programie obliczasz normalnie np float a; a = sin(90); proste nie?? a teraz lepszy myk jak zapisac duza liczbe probek do pamieci typu float?? procek niestety ma za malo sramu a na 1000 lub wiecej probek...np dla 1024 probek typu float (zajmuje 4 bajty ---double jeszcze wiecej bo 8 :P) potrzeba 1024 *4 =...
Witam Mam pytanie jak w temacie. Jak mozna w najprostszy sposob zrobic przetwornik ADC dajacy na wyjsciu liczbe zmiennoprzecinkowa? Chodzi mi przedewszystkim o sama logike, jak nalezy probkowac i co nalezy jeszcze dodac do zwyklego przetwornika ADC aby na wyjsciu dostac liczbe zmiennoprzecinkowa? Prosze o jakies wskazowki:)
Co do zaokrąglania, wystarczy dodać 0.5 przed konwersją do int-a (odjąć dla liczb ujemnych).
przede wszystkim to na potrzeby operacji do pierwszego rejestru powinieneś wpisać cechę, a więc (pracując wyłącznie na 8 bitach) RA=liczba[0]<<1 + liczba[1]>>7; mantysę zawsze możesz obcinać w razie konieczności - ucierpi dokładność na tym tylko.
Witam! Chciałbym się dowiedzieć jak poprawnie używać liczby zmienno przecinkowe. Korzystam z win-avr i niestety nie mogę sobie poradzić. Dodałem biblioteki printf_flt oraz m (math) i odpowiednie opcje dla linkera (zywcem wziete ze strony avr-gcc) ale niestety jakiekolwiek uzywanie floatów daje mi 0 (sprintf'uje do tablicy znakow i usartem przesylam...
Witam. Szukałem na forum, ale nie znalazłem nic na ten temat dlatego założyłem nowy. A mianowicie. Potrzebuję napisać w języku VHDL algorytm szybkiego dodawania liczb zmiennoprzecinkowych i nie wiem jak się za to zabrać, jest ktoś na forum kto zna się na tym i mógłby mi pomóc? Pozdrawiam
Nie szukałem jeszcze jak się konwertuje float do string'a, ale jak nic nie znajdziesz możesz skorzystać z pomysłu flapo213... Z tym, że w programie możesz sobie w każdej chwili rzutować dane na int. Jest to jednak bardzo obliczeniożerne, dlatego pewnie pracownicy microchipa nie poszerzyli printf o float'y. Więc możesz zrobić tak: float liczba=12.4;...
Witam. Czytam informacje o standardzie IEEE 754, który wyznacza sposób kodowania liczb zmiennoprzecinkowych i zastanawiam się czemu: 1. wykładnik kodowany jest w systemie z nadmiarem a nie w U2 2. mantysa zapisywana jest w systemie znak moduł nie też w U2. Operacje arytmetyczne na liczbach w kodzie U2 są o wiele prostsze niż w ZM.
Poszukuję kodu dodawania liczb zmiennoprzecinkowych napisanego w verilogu. Zacząłem robić własny układ, ale wydaje mi się, że idę w złą stronę (najpierw mam blok wybierania maksimum 6 poziomów, potem denormalizacji czyli 4 poziomy, dodawanie kolejne 4 i dalej nie robiłem bo uznałem, że chyba mam coś nie tak) i chciałbym zobaczyć jak taki układ wygląda....
Jeśli masz do dyspozycji tylko ALU (na to wskazuje spis rozkazów) to po prostu musisz symulować działania na liczbie zmiennoprzecinkowej.
Witam! Mam problem z odczytaniem z klawiatury liczby zmiennoprzecinkowej. Program się kompiluje i kiedy wpisuję liczbę całkowitą to jest wszystko w porządku. A kiedy wpisuje liczbę z przecinkiem lub z kropką program wywala błąd: "An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll Additional information: Nieprawidłowy format...
liczba 24 bitowa? To nie bardzo jest standard... Choć można doszukać się specyfikacji. Ale powiem wprost - tu nigdzie 259 nie widać nawet... :|
Witam. Kolejny problem po linearyzacji to wyświetlenie wyniku na panelu OP7. To jak to zrobić to nie mam problemu. Zastanawiam się tylko czy nie należy zrobić tego tak jak np w UNITRONICS. Czyli konwertujemy liczbę zmiennoprzecinkową na dwa słowa. Jedno część całkowita a druga część po przecinku. W S7-300 nie bardzo jestem oblatany także proszę o ukierunkowanie.Zależy...
Dzięki wszystkim radom udało się teraz zrealizować program tylko na liczbach całkowitych, bardzo dziękuję, wiele się nauczyłem przy tych konwersjach, nie znałem dobrze tych mechanizmów. Program działa o wiele szybciej i teraz mieści się w magicznej granicy poniżej 5kB, zaoszczędziłem cały 1kB oraz mnóstwo cykli zegara. Temat uważam za zamknięty:)
Ja tak zawsze w głowę zachodzę - jak można się tak męczyć z tymi operacjami na zmiennych float, jak można marnować hektary pamięci flash na te wszystkie funkcje dtostrf, sprintf , włączanie specjalnych opcji w makefile - na takie mega proste działania do których NIE TRZEBA NAWET JEDNEJ ZMIENNEJ TYPU FLOAT UŻYĆ. Mam nadzieję, że jak podam ci poniżej...
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...
Zapisz po prostu liczbę zmiennoprzecinkową w formacie 0.0. Też niedawno zacząłem używać GX works i widzę, że liczbę zmiennoprzecinkową można również zapisać jako E0.0. Instrukcje arytmetyczne i porównania zaczynają się od "E", czyli E-, E+, E*...EMOV. Instrukcje porównania to LDE>=, LDE<=.....
próbowałem tylko ze to musi być wtedy typu single bo word nie przyjmuje zmiennoprzecinkowej liczby czyli nie da sie pomnoży razy 10 próbowałem tez pozmieniać wszystkie typy na single ale też nie poszło
Ok jest wszystko pięknie chodzi. Ale zdążyłem to zrobić innym sposobem, rozdzielałem liczbę na wiele sposobów, najpierw z pierwotnej uzyskiwałem całkowitą potem pierwotną razy 10 - odejmowałem całkowitą poprzednią i miałem wartość dziesiętną potem wyświetlałem to jako dwie liczby w środek dając przecinek. A tu jeszcze przetłumaczona instrukcja używania...
Witam! Tworzę kontroler swojej deski elektrycznej. Wszystko idzie po mojej myśli poza... Mnożeniem zmiennych przez liczby zmiennoprzecinkowe. Otóż stworzyłem taki kod: Dodano po 19 Więc tak.. Typ zmiennych A i B zamieniłem na Single, ale dalej mnie to nie satysfakcjonuje, bo miała być to zmienna "pojedynczej precyzji" czyli jak zakłądam tylko jedna...