Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Príspevok NapísalOffline : 22.09.2012 21:32

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();
}


Offline

Čestný člen
Čestný člen
Nepresnosť pocitania

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 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.


Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Príspevok Napísal autor témyOffline : 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


Offline

Užívateľ
Užívateľ
Nepresnosť pocitania

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok NapísalOffline : 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
Offline

Čestný člen
Čestný člen
Nepresnosť pocitania

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 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.


Offline

Užívateľ
Užívateľ
Nepresnosť pocitania

Registrovaný: 24.08.12
Prihlásený: 09.02.19
Príspevky: 59
Témy: 0
Príspevok NapísalOffline : 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)
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Príspevok Napísal autor témyOffline : 23.09.2012 23:35

Všetkým Vám trom veľmi ďakujem, najmä tebe faraon. Pomohli ste mi. :)


Offline

Užívateľ
Užívateľ
Nepresnosť pocitania

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 24.09.2012 0:15

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
Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Po 18 rokoch počítania dokonalá neporaziteľná stratégi

v Novinky

7

493

22.07.2007 21:50

yossarian Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra