|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
11.8.2012, 14:00 | #1 |
Član
Član od: 3.5.2012.
Poruke: 45
Zahvalnice: 16
Zahvaljeno 2 puta na 2 poruka
|
Problem sa funkcijama u C-u
Zdavo, forumaši
Vi ste mi trenutno najbliži izvor pomoći, pa ću Vam postaviti još jedno pitanje. Skoro sam počeo da učim C jezik i koristim Code::Blocks editor. Primetio sam da mi trigonometrijske funkcije šalju pogrešne rezultate (npr.: sin(90)=0.89). Interesuje me zašto je to tako i koliko bi moglo da smeta pri komplikovanijem programiranju? Unapred hvala! |
11.8.2012, 14:15 | #2 |
Član
Član od: 15.12.2010.
Lokacija: Beograd
Poruke: 120
Zahvalnice: 26
Zahvaljeno 39 puta na 32 poruka
|
Re: Problem sa funkcijama u C-u
Sinus od 90 i jeste 0.89 ali to ti je u radianima.
Sinus od Pi/2 je 1. |
Sledeći korisnik se zahvaljuje korisniku chaami na korisnoj poruci: | ||
NEWSWEETTOFFEE (11.8.2012) |
11.8.2012, 14:39 | #3 |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Problem sa funkcijama u C-u
Samo ću da dodam na odgovor da ne bude zabune oko prve rečenice šta je tačno u radijanima.
Broj pod sinusom (tj. bilo kojom trigonometrijskom funkcijom koja zahteva ugao kao argument) u C-u je u radijanima a rezultat trignometrijske funkcije je neimenovani broj (nema jedinicu). sin(90) se dakle prevodi kao "sinus od 90 radijana" a pošto je veza između radijana i stepeni (stepeni) = (radijana) * 180 / Pi dobija se da sin(90) preveden u stepene u stvari znači "sinus od 5156.62 stepeni" |
Sledeći korisnik se zahvaljuje korisniku Neutrino na korisnoj poruci: | ||
NEWSWEETTOFFEE (11.8.2012) |
11.8.2012, 18:04 | #4 |
Član
Član od: 3.5.2012.
Poruke: 45
Zahvalnice: 16
Zahvaljeno 2 puta na 2 poruka
|
Re: Problem sa funkcijama u C-u
Hvala, ljudi. Možda sam trebao toga i sam da se setim.
A može li se promeniti pa da trigonometrijske funkcije u C jeziku uzimaju kao argumente brojeve koji označavaju broj stepeni? |
11.8.2012, 18:27 | #5 |
Starosedelac
|
Re: Problem sa funkcijama u C-u
Kod:
double mymath(double (*funcptr)(double), double arg) { return funcptr(arg / 180 * 3.1415926535897932384626433832795); } // ... printf("%lf", mymath(sin, 90)); |
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci: | ||
Patrick (2.9.2012) |
11.8.2012, 18:49 | #6 |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Problem sa funkcijama u C-u
math.h ima već svoju implementaciju Pi konstante kojoj može da se pristupi sa M_PI pa nema potrebe da se koristi eksplicitno navođenje njene vrednosti (3.1415...)
|
11.8.2012, 19:00 | #7 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.085
Zahvaljeno 4.923 puta na 2.859 poruka
|
Re: Problem sa funkcijama u C-u
A možeš i seljačkim makro define-om
#define MYSIN(x) sin(x / 180 * M_PI) Velika slova su tu čisto jer je konvencija da se makroi pišu velikim slovima (da bi se na prvi pogled znalo da je makro a ne "prava" funkcija sa pravim argumentima i pravim telom funkcije). |
11.8.2012, 22:01 | #9 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
Re: Problem sa funkcijama u C-u
Samo jedna mala napomena: M_PI nije deo ANSI C standarda. Ako želiš da koristiš ANSI C bez GNU ekstenzija (-ansi gcc opcija), nećeš imati M_PI.
U to, slučaju, jednostavno definišeš svoj M_PI (ili kako god već hoćeš da ga zoveš). |
16.8.2012, 1:17 | #10 |
V.I.P. Programiranje
|
Re: Problem sa funkcijama u C-u
Da se nadovežem, ako ti treba najveća preciznost, ne moraš da hardkoduješ, možeš samo da definišeš recimo
Kod:
const double PI = 2.0 * asin(1.0); |
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Problem sa puštanjem HD filmova sa eksternog HDD-a | Pipboy | Foto i audio/video | 0 | 24.12.2010 21:09 |
Nokia e71 i problem sa USB konekcijom | PsyDuck | Aparati i oprema | 5 | 1.12.2010 15:17 |
Problem sa PLAVIM EKRANOM | backo87 | Kvarovi | 7 | 25.10.2010 18:12 |
WBR-3408 11g Wireless Broaband Router- Problem sa umrežavanjem | Hich | Komunikacioni uređaji i umrežavanje | 1 | 19.2.2010 9:42 |
HP DeskJet f4180 - problem sa instalacijom | vanila | Ostale komponente | 3 | 12.3.2009 19:22 |