| | |
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
|
Zdravim,
Spravil som si taky mensi program na goniometricke funkcie. Zistil som, ze je tam nepresnost za desatinnou ciarkom na 8.,9.,10.... mieste. Neviete cim by to mohlo byt ? Viem, že to neni nejaka velka chyba ale aj tak by ma to zaujimalo. Dakujem
Kód: #include<stdio.h> #include<math.h>
main() { int stupne; float rad,x1,x2,x3,x4; printf("Zadaj uhol v stupnoch: "); scanf("%d",&stupne);
rad=(stupne*M_PI)/180; x1=sin(rad); x2=cos(rad); x3=tan(rad); x4=1/x3;
printf("\n\nUhol v radianoch: %.9f\n",rad); printf("\n sin %d= %.9f",stupne,x1); printf("\n cos %d= %.9f",stupne,x2); printf("\n tg %d= %.9f",stupne,x3); printf("\ncotg %d= %.9f",stupne,x4);
if(getch()==0) getch(); }
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 22.09.2012 21:45 | |
|
Uplne vsetkym. V pocitaci nejdu reprezentovat cisla s nekonecnou presnostou, takze kazdy riadok, ktory si napisal, ti pridava na odchylke.
|
|
| Napísal autor témy luke0144: 22.09.2012 22:02 | |
|
a da sa to odstranit ci nie?
// pridané po 14 minútach od posledného príspevku
este by som potreboval prikaz na koniec programu, aby som nemusel zatvarat ten program ale ono by mi to znovu vypisalo zaciatok a ja som tam dal dalsiu hodnotu, vyhodilo to vysledok a znovu zaciatok a tak dokola az kym by som nezavrel program...dakujem
|
|
Registrovaný: 07.04.12 Prihlásený: 02.06.21 Príspevky: 907 Témy: 54 | Napísal ado130: 22.09.2012 22:58 | |
|
Pomocou while by to malo ísť, prípadne sa s tým môžeš trocha pohrať a pridať aj nejaké to menu(switch).
_________________ Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3 Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0 Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40 Monitor: Dell U2515H Mobil: Xiaomi Redmi Note 3 Special Edition |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 23.09.2012 0:07 | |
|
luke0144 píše: a da sa to odstranit ci nie? Neda, pocitac nie je schopny reprezentovat realne cisla, iba podmnozinu racionalnych. Uz len konstanta M_PI je dost nepresna.
AFAIK, procesor ma pre hodnoty goniometrickych funkcii nejake svoje tabulky, takze mozes pre zmenu skusit MacLaurinov rozvoj a uvidis, co to da, ale nemam vobec predstavu, ako to dopadne.
|
|
Registrovaný: 24.08.12 Prihlásený: 09.02.19 Príspevky: 59 Témy: 0 | Napísal faraon: 23.09.2012 7:38 | |
|
První věc - jestli se učíš podle nějaké třicet let staré knížky, tak jí ulož do knihovny a pořiď si novější, protože dneska je Céčko o pořádný kus dál. Tohle měj v každém programu, a používej odsazování:
Kód: int main(void) { . . . return 0; } Místo toho void se někdy píší deklarace proměnných, přes které program načítá argumenty z příkazového řádku. Druhá věc - proměnná typu float je (v současné době) obvykle uložená do čtyř bajtů v paměti. Z toho tři bajty, tedy dvacet čtyři bity, slouží pro uložení číslic, a zbytek je posun desetinné tečky a znaménka. Velmi zjednodušeně řečeno, a navíc je to všechno ve dvojkové soustavě. No a do těch čtyřiadvaceti bitů se ti vejde právě jen sedm desítkových číslic, se kterými se dá pracovat, všechno co je za nimi se při výpočtech prostě ztratí. Když potřebuješ počítat s vyšší přesností, musíš použít typ do kterého se vejdou. V tomhle případu bude stačit double. Třetí věc - Pro to opakování potřebuješ cyklus, který se vykoná minimálně jednou, tedy s podmínkou na konci. To provedeš takhle: Kód: do { . . . while(getchar()!='\n'); /* vyprázdnění bufferu */ printf("\nZnovu? (a/n) "); stupne=getchar(); } while (stupne=='a' || stupne=='A' || stupne=='\n'); Lepší by bylo použít pro ten závěr další proměnnou s vhodným názvem, třeba opakovat, ale já jsem použil takovou, co už tam byla a zrovna neobsahovala žádnou důležitou informaci. Čtvrtá věc - U mě v GCC je konstanta M_PI pro takovýhle program přesná dostatečně, ale kdyby třeba nestačila, můžeš si klidně nadefinovat vlastní: Kód: #define PI 3.1415926535897932384626433832795028841971693993751058209749445923
_________________ "Existuje pouze jeden člověk, který má méně přátel než Bill Gates, a tím je Saddám Husajn." (Paul Grayson) |
|
| Napísal autor témy luke0144: 23.09.2012 23:35 | |
|
Všetkým Vám trom veľmi ďakujem, najmä tebe faraon. Pomohli ste mi.
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 Bydlisko: Kesa |
V počítači sa ti každé číslo prehodí do dvojkovej sústavy. číslo zapísané v dvojkovej sústave začína bitom, ktorý ti určuje znamienko, potom nasleduje 8 bitov, ktoré ti určujú exponent a následne ide 23 bitov, ktoré ti určujú mantisu, čo je akoby to číslo (nebudem ti to tu vypisovať ako, dá sa to nájsť na googli). Takže moc dlhé číslo znamená pretečenie a hádže ti to blbosti. Toto sa konkrétne nazýva jednoduchá presnosť a určuje ju norma IEE 754. je to FLOAT. napríklad DOUBLE máš 1 znamienkový bit, 11 bitov tvorí exponent a 52 mantisa.
_________________ NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n |
|
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|